From 8863ef57547e03a08ffbbd2ef365d8cd2019c631 Mon Sep 17 00:00:00 2001 From: duartebianca Date: Mon, 20 May 2024 17:49:07 -0300 Subject: [PATCH 001/406] Squashed 'frontend/' content from commit ecb2f67 git-subtree-dir: frontend git-subtree-split: ecb2f67dc49bc4546ec8d0f283e7cd6ce0619a15 --- .cypress-cucumber-preprocessorrc.json | 7 + .env.example | 1 + .eslintrc.cjs | 15 + .gitignore | 39 + .husky/pre-commit | 4 + .husky/pre-push | 4 + .nycrc.json | 8 + README.md | 105 + cypress.config.ts | 44 + .../e2e/features/common-step-definitions/1.ts | 1 + .../features/tests/common-step-definitions.ts | 5 + cypress/e2e/features/tests/tests.feature | 19 + cypress/e2e/features/tests/tests.ts | 55 + cypress/fixtures/example.json | 5 + cypress/support/commands.ts | 52 + cypress/support/e2e.ts | 21 + cypress/tsconfig.json | 9 + docs/architecture-pattern.md | 58 + index.html | 13 + package-lock.json | 20630 ++++++++++++++++ package.json | 61 + public/vite.svg | 1 + src/App.tsx | 22 + src/Provider.tsx | 8 + src/app/home/components/.gitkeep | 0 src/app/home/context/HomeContext/index.tsx | 54 + src/app/home/context/HomeContext/reducer.ts | 21 + src/app/home/context/HomeContext/service.ts | 80 + src/app/home/context/HomeContext/types.ts | 17 + src/app/home/forms/TestForm.ts | 9 + src/app/home/models/TestModel.ts | 9 + .../home/pages/CreateTest/index.module.css | 52 + src/app/home/pages/CreateTest/index.tsx | 66 + src/app/home/pages/ListTests/index.module.css | 34 + src/app/home/pages/ListTests/index.tsx | 45 + src/global.css | 11 + src/main.tsx | 13 + src/shared/assets/react.svg | 1 + src/shared/components/Button/index.module.css | 8 + src/shared/components/Button/index.tsx | 14 + src/shared/enums/request-status.enum.ts | 6 + src/shared/enums/result.enum.ts | 4 + src/shared/errors/app-error.ts | 46 + src/shared/errors/http-error.ts | 150 + src/shared/hooks/usePrevious.tsx | 13 + src/shared/models/BaseApiResponseModel.ts | 15 + src/shared/services/ApiService.ts | 118 + src/shared/types/request-status.ts | 107 + src/shared/types/result.ts | 30 + src/tests/setup.ts | 9 + src/tests/shared/components/Button.test.tsx | 26 + src/vite-env.d.ts | 9 + tsconfig.json | 31 + tsconfig.node.json | 10 + vite.config.ts | 17 + vitest.config.ts | 15 + 56 files changed, 22227 insertions(+) create mode 100644 .cypress-cucumber-preprocessorrc.json create mode 100644 .env.example create mode 100644 .eslintrc.cjs create mode 100644 .gitignore create mode 100755 .husky/pre-commit create mode 100755 .husky/pre-push create mode 100644 .nycrc.json create mode 100644 README.md create mode 100644 cypress.config.ts create mode 100644 cypress/e2e/features/common-step-definitions/1.ts create mode 100644 cypress/e2e/features/tests/common-step-definitions.ts create mode 100644 cypress/e2e/features/tests/tests.feature create mode 100644 cypress/e2e/features/tests/tests.ts create mode 100644 cypress/fixtures/example.json create mode 100644 cypress/support/commands.ts create mode 100644 cypress/support/e2e.ts create mode 100644 cypress/tsconfig.json create mode 100644 docs/architecture-pattern.md create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/vite.svg create mode 100644 src/App.tsx create mode 100644 src/Provider.tsx create mode 100644 src/app/home/components/.gitkeep create mode 100644 src/app/home/context/HomeContext/index.tsx create mode 100644 src/app/home/context/HomeContext/reducer.ts create mode 100644 src/app/home/context/HomeContext/service.ts create mode 100644 src/app/home/context/HomeContext/types.ts create mode 100644 src/app/home/forms/TestForm.ts create mode 100644 src/app/home/models/TestModel.ts create mode 100644 src/app/home/pages/CreateTest/index.module.css create mode 100644 src/app/home/pages/CreateTest/index.tsx create mode 100644 src/app/home/pages/ListTests/index.module.css create mode 100644 src/app/home/pages/ListTests/index.tsx create mode 100644 src/global.css create mode 100644 src/main.tsx create mode 100644 src/shared/assets/react.svg create mode 100644 src/shared/components/Button/index.module.css create mode 100644 src/shared/components/Button/index.tsx create mode 100644 src/shared/enums/request-status.enum.ts create mode 100644 src/shared/enums/result.enum.ts create mode 100644 src/shared/errors/app-error.ts create mode 100644 src/shared/errors/http-error.ts create mode 100644 src/shared/hooks/usePrevious.tsx create mode 100644 src/shared/models/BaseApiResponseModel.ts create mode 100644 src/shared/services/ApiService.ts create mode 100644 src/shared/types/request-status.ts create mode 100644 src/shared/types/result.ts create mode 100644 src/tests/setup.ts create mode 100644 src/tests/shared/components/Button.test.tsx create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts create mode 100644 vitest.config.ts diff --git a/.cypress-cucumber-preprocessorrc.json b/.cypress-cucumber-preprocessorrc.json new file mode 100644 index 0000000000..21129d910b --- /dev/null +++ b/.cypress-cucumber-preprocessorrc.json @@ -0,0 +1,7 @@ +{ + "nonGlobalStepDefinitions": true, + "stepDefinitions": [ + "cypress/e2e/features/[filepath]/*.ts", + "cypress/e2e/features/common-step-definitions/*.ts" + ] +} diff --git a/.env.example b/.env.example new file mode 100644 index 0000000000..e66a4d53e4 --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +VITE_API_URL=http://127.0.0.1:5001/api \ No newline at end of file diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000000..ff09c7e520 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,15 @@ +module.exports = { + env: { browser: true, es2020: true }, + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:react-hooks/recommended", + ], + parser: "@typescript-eslint/parser", + parserOptions: { ecmaVersion: "latest", sourceType: "module" }, + plugins: ["react-refresh"], + rules: { + "react-refresh/only-export-components": "warn", + "@typescript-eslint/no-explicit-any": "off", + }, +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..cb6857f740 --- /dev/null +++ b/.gitignore @@ -0,0 +1,39 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local +coverage +cypress-coverage +.nyc_output +cypress/screenshots +cypress/videos +cypress/downloads + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Env +.env +.env.local +.env.test +.env.testing +.env.development +.env.staging +.env.production \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000000..0a86f55779 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npm run lint diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100755 index 0000000000..9c7ed53f5b --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npm run test \ No newline at end of file diff --git a/.nycrc.json b/.nycrc.json new file mode 100644 index 0000000000..357c3464d5 --- /dev/null +++ b/.nycrc.json @@ -0,0 +1,8 @@ +{ + "all": true, + "extends": "@istanbuljs/nyc-config-typescript", + "check-coverage": true, + "report-dir": "./cypress-coverage", + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": ["cypress/**/*.*", "**/*.d.ts", "**/*.cy.tsx", "**/*.cy.ts"] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000000..9b8f64044e --- /dev/null +++ b/README.md @@ -0,0 +1,105 @@ +# ESS Front-end React + +This is the Front-end base project in React for the Software and Systems Engineering discipline, offered by the Informatics Center (CIn) of the Federal University of Pernambuco (UFPE). + +## Table of Contents + +1. [Getting Started](##getting-started) +2. [Running the tests](#running-the-tests) +3. [Scripts](#scripts) +4. [Dependencies](#dependencies) +5. [Architecture](#architecture) + +## Getting Started + +These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. + +### Prerequisites + +To run this project, you'll need to have the following software installed on your system: + +- Node.js +- npm (Node Package Manager) + +### Installing + +Clone the repository and install the dependencies by running the following command in the project directory: + +``` +npm install +``` + +### First time running ? + +Run the follow scripts + +``` +chmod +x .husky/pre-commit +chmod +x .husky/pre-push +``` + +``` +npm run +``` + +### Environment + +This project uses `.env` files to manage environment variables. You can create a `.env.development` file in the project directory and set the environment variables in the file (iou can create it from .`env.example`). The `env` script in the `package.json` file uses the `env-cmd` package to load the environment variables from the `.env.development` file. + +### Running the App + +To start the app, run the following command: + +``` +npm run dev +``` + +This command will run the React app in development with Vite.js script + +## Running the tests + +There are two types of tests configured in the base project: unit tests using Vitest with React Testing Library and E2E acceptance tests using Cypress with Cucumber. It's interesting to create the **.env.testing** at the root of the project the same way it was created to run in development, changing the necessary values. + +To run unit tests + +``` +npm run test +``` + +To run E2E tests in **interactive mode** + +``` +npm run cy:e2e-interactive +``` + +To run E2E tests in **headless mode** + +``` +npm run cy:e2e-headless +``` + +**Note:** To run E2E tests that test flows that involve connecting to the back-end, such as login, the back-end must be running. Remember to provide a valid URL for the backend in the **.env.testing** file. + +## Scripts + +The following scripts are available in the `package.json` file: + +- `dev`: Runs the app in development mode. +- `build`: Compiles the TypeScript code. +- `test`: Runs the Vitest tests for the project. +- `prettier`: Formats the code using Prettier. +- `lint`: Lints the code using ESLint. + +## Dependencies + +The following dependencies are used in the project: + +- [vite](https://github.com/microsoft/TypeScript): Vite is a new breed of frontend build tooling that significantly improves the frontend development experience. +- [react](https://github.com/facebook/react): React is a JavaScript library for building user interfaces. +- [react-router-dom](https://github.com/remix-run/react-router): React Router is a lightweight, fully-featured routing library for the React JavaScript library. +- [react-hook-form](https://github.com/react-hook-form/react-hook-form): React Hook Form is a library for React that simplifies form validation and input data handling. +- [zod](https://github.com/colinhacks/zod): Zod is a TypeScript-first schema declaration and validation library. I'm using the term "schema" to broadly refer to any data type, from a simple string to a complex nested object. + +## Architecture + +To understand and learn more details about the structure of the project, click [here](./docs/architecture-pattern.md) to be redirected to the README that contains this information. diff --git a/cypress.config.ts b/cypress.config.ts new file mode 100644 index 0000000000..6b92d49a96 --- /dev/null +++ b/cypress.config.ts @@ -0,0 +1,44 @@ +import { defineConfig } from "cypress"; +import cucumberPreprocessor from "@badeball/cypress-cucumber-preprocessor"; +import createBundler from "@bahmutov/cypress-esbuild-preprocessor"; +import { createEsbuildPlugin } from "@badeball/cypress-cucumber-preprocessor/esbuild"; + +export default defineConfig({ + video: false, + viewportWidth: 1280, + viewportHeight: 720, + defaultCommandTimeout: 5000, + execTimeout: 60000, + retries: { + runMode: 1, + openMode: 0, + }, + chromeWebSecurity: false, + env: { + codeCoverage: { + exclude: ["cypress/**/*.*", "coverage/**/*.*"], + }, + }, + e2e: { + async setupNodeEvents( + on: Cypress.PluginEvents, + config: Cypress.PluginConfigOptions + ): Promise { + await cucumberPreprocessor.addCucumberPreprocessorPlugin(on, config); + + on( + "file:preprocessor", + createBundler({ + plugins: [createEsbuildPlugin(config)], + }) + ); + + // TODO: Fix coverage + // coverageTask(on, config); + + return config; + }, + baseUrl: "http://localhost:3000", + specPattern: "cypress/e2e/**/*.feature", + }, +}); diff --git a/cypress/e2e/features/common-step-definitions/1.ts b/cypress/e2e/features/common-step-definitions/1.ts new file mode 100644 index 0000000000..04cb8e675d --- /dev/null +++ b/cypress/e2e/features/common-step-definitions/1.ts @@ -0,0 +1 @@ +// e.g Given("o usuário "tal" está logado", (page: string) => {}); diff --git a/cypress/e2e/features/tests/common-step-definitions.ts b/cypress/e2e/features/tests/common-step-definitions.ts new file mode 100644 index 0000000000..67db2532ea --- /dev/null +++ b/cypress/e2e/features/tests/common-step-definitions.ts @@ -0,0 +1,5 @@ +import { Given } from "@badeball/cypress-cucumber-preprocessor"; + +Given("o usuário está na página {string}", (page: string) => { + cy.visit(page); +}); diff --git a/cypress/e2e/features/tests/tests.feature b/cypress/e2e/features/tests/tests.feature new file mode 100644 index 0000000000..0894d2cc68 --- /dev/null +++ b/cypress/e2e/features/tests/tests.feature @@ -0,0 +1,19 @@ +Feature: Criar e visualizar tests + As a usuário + I want criar e visualizar meus tests criados. + so that eu possa ter um histórico de tests. + +Scenario: Criar um test + Given o usuário está na página "create-test" + When o usuário preenche o campo "input-name" com "Teste 1" e clica no botão "create" + Then o usuário deve ver a mensagem "Teste criado com sucesso!" + +Scenario: Criar um test com nome vazio + Given o usuário está na página "create-test" + When o usuário não preenche o campo "input-name" e clica no botão "create" + Then o usuário deve ver a mensagem "O campo nome deve ter no mínimo 5 caracteres" do campo "input-name" + +Scenario: Visualizar tests + Given o usuário está na página "create-test" com o test "Test Seed" criado + When o usuário clica no botão "view-tests" + Then o usuário deve ir para a página "tests" e ver o test "Test Seed" diff --git a/cypress/e2e/features/tests/tests.ts b/cypress/e2e/features/tests/tests.ts new file mode 100644 index 0000000000..d09a0d4c64 --- /dev/null +++ b/cypress/e2e/features/tests/tests.ts @@ -0,0 +1,55 @@ +import { Given, Then, When } from "@badeball/cypress-cucumber-preprocessor"; + +// Scenario: Criar um test +//Given: common-step-definitions.ts + +When( + "o usuário preenche o campo {string} com {string} e clica no botão {string}", + (field: string, value: string, button: string) => { + cy.getDataCy(field).type(value); + cy.getDataCy(button).click(); + } +); + +Then("o usuário deve ver a mensagem {string}", (text: string) => { + cy.on("window:alert", (str) => { + expect(str).to.equal(text); + }); +}); + +// Scenario: Criar um test com nome vazio +//Given: common-step-definitions.ts + +When( + "o usuário não preenche o campo {string} e clica no botão {string}", + (_: string, button: string) => { + cy.getDataCy(button).click(); + } +); + +Then( + "o usuário deve ver a mensagem {string} do campo {string}", + (text: string, field: string) => { + cy.getDataCy(`${field}-error`).should("contain", text); + } +); + +// Scenario: Visualizar tests +Given( + "o usuário está na página {string} com o test {string} criado", + (page: string) => { + cy.visit(page); + } +); + +When("o usuário clica no botão {string}", (button: string) => { + cy.getDataCy(button).click(); +}); + +Then( + "o usuário deve ir para a página {string} e ver o test {string}", + (page: string, test: string) => { + cy.url().should("include", page); + cy.getDataCy(`test-item-${test}`).should("contain", test); + } +); diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json new file mode 100644 index 0000000000..02e4254378 --- /dev/null +++ b/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts new file mode 100644 index 0000000000..0bd962da50 --- /dev/null +++ b/cypress/support/commands.ts @@ -0,0 +1,52 @@ +/// +// *********************************************** +// 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 +// } +// } +// } + +declare global { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace Cypress { + interface Chainable { + getDataCy(dataCySelector: string): Chainable>; + } + } +} + +Cypress.Commands.add("getDataCy", (dataCySelector) => { + return cy.get(`[data-cy="${dataCySelector}"]`); +}); + +export {}; diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts new file mode 100644 index 0000000000..9425607084 --- /dev/null +++ b/cypress/support/e2e.ts @@ -0,0 +1,21 @@ +// *********************************************************** +// 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"; +import "@cypress/code-coverage/support"; + +// Alternatively you can use CommonJS syntax: +// require('./commands') diff --git a/cypress/tsconfig.json b/cypress/tsconfig.json new file mode 100644 index 0000000000..17efe100d9 --- /dev/null +++ b/cypress/tsconfig.json @@ -0,0 +1,9 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compilerOptions": { + "rootDir": "./", + "sourceMap": false, + "types": ["node", "cypress"] + }, + "include": ["./**/*.ts"] +} diff --git a/docs/architecture-pattern.md b/docs/architecture-pattern.md new file mode 100644 index 0000000000..5b092007d6 --- /dev/null +++ b/docs/architecture-pattern.md @@ -0,0 +1,58 @@ +# Architecture Pattern + +The base project was created to give a quick "start" to the discipline's team projects. But, at the same time, we didn't want to give up a certain level of organization that helps to develop features safely and makes it easier to create tests. + +## Table of Contents + +1. [Separation into modules](#layered-architecture) +2. [Shared](#shared) +3. [Navigation](#navigation) +4. [Conclusion](#conclusion) + +--- + +# Separation into modules + +The idea here is that each flow or important part of the project is separated into modules. Let's imagine that you have an authentication section, where you can create an account, log in or even recover a password. We can consider this case as an authentication module. + +## Components + +The interface components that can be reused in other parts of the module in question would be created in the "components" folder. For example, a modal with terms of use that appears both in the login process and in account creation. Therefore, this modal would be located in the "autenticacao" module, inside the "components" folder. + +## Pages + +The pages would be where the "full screens" would go. For example, a login page would have inputs, buttons, and other components needed for that specific functionality. + +## Context + +The context is made up of a series of files that we will try to explain in parts. In general, this is where we concentrate our application's business logic, such as functions to make requests to the back-end and module state management, among other aspects. + +To manage state, we will be using React's useReducer. Consequently, we will use actions logic to determine what changes should be made to the state. + +### types.ts + +As the name suggests, this is a type definition file. Here, we define the data types for the state, that is, the attributes that the state must have, and the types of actions, which basically define which actions can be used to manipulate the state. + +### reducer.ts + +In this file, we have the reducer function, which receives an action and the current state, and makes the necessary changes to the state based on that action. + +### service.ts + +The service file is where we concentrate the functions responsible for executing the business logic actions. These service functions are called from pages and components when needed. + +### index.tsx + +In this file, we create our provider (provider) using React Context. With it, we can share the state and services (services) throughout the application or in specific parts. If you have questions about Context, I recommend consulting the official React [documentation](https://react.dev/learn/passing-data-deeply-with-context). + +# Shared + +The "shared" folder is the representation of a module that contains information that can be reused in other modules. For example, it can include a generic button component that can be used in different parts of the application. + +# Navigation + +To navigate the application, we use the **react-router-dom** package, and its configuration is done in the **App.tsx** file. There's not much to explain here, it's simply the use of React in conjunction with the most popular navigation library. + +# Conclusion + +Certainly, there are more details about the functionalities that are used in the project. However, the **Home** module example case already covers many aspects, including testing. The base project is designed to make it easy, not to limit your preferences. What needs to be emphasized is that the main idea is the architecture used, which clearly distributes code responsibilities, thus facilitating maintenance and testing. diff --git a/index.html b/index.html new file mode 100644 index 0000000000..b56c54206f --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + ESS - Frontend + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..5af242dcbd --- /dev/null +++ b/package-lock.json @@ -0,0 +1,20630 @@ +{ + "name": "frontend-react-ess", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "frontend-react-ess", + "version": "0.1.0", + "dependencies": { + "@hookform/resolvers": "^3.1.0", + "axios": "^1.4.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-hook-form": "^7.44.1", + "react-router-dom": "^6.11.2", + "zod": "^3.21.4" + }, + "devDependencies": { + "@badeball/cypress-cucumber-preprocessor": "^18.0.1", + "@bahmutov/cypress-code-coverage": "^2.6.1", + "@bahmutov/cypress-esbuild-preprocessor": "^2.2.0", + "@cucumber/cucumber": "^9.2.0", + "@cypress/code-coverage": "^3.10.7", + "@istanbuljs/nyc-config-typescript": "^1.0.2", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^14.0.0", + "@types/jest": "^29.5.1", + "@types/node": "^20.2.5", + "@types/react": "^18.0.28", + "@types/react-dom": "^18.0.11", + "@types/testing-library__jest-dom": "^5.14.6", + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "@vitejs/plugin-react": "^4.0.0", + "@vitest/coverage-c8": "^0.31.1", + "cypress": "^12.15.0", + "esbuild": "^0.18.8", + "eslint": "^8.38.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "husky": "^8.0.3", + "jsdom": "^22.1.0", + "start-server-and-test": "^2.0.0", + "typescript": "^5.0.2", + "vite": "^4.3.2", + "vite-plugin-istanbul": "^4.1.0", + "vitest": "^0.31.1" + } + }, + "node_modules/@actions/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz", + "integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==", + "dev": true, + "dependencies": { + "@actions/http-client": "^2.0.1", + "uuid": "^8.3.2" + } + }, + "node_modules/@actions/core/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@actions/http-client": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.1.0.tgz", + "integrity": "sha512-BonhODnXr3amchh4qkmjPMUO8mFi/zLaaCeCAJZqch8iQqyDnVIkySjB38VHAC8IJ+bnlgfOqlhpyCUZHlQsqw==", + "dev": true, + "dependencies": { + "tunnel": "^0.0.6" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@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.5", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@badeball/cypress-configuration": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.18.8", + "debug": "^4.3.2", + "esbuild": "^0.14.23", + "glob": "^7.1.6", + "minimatch": "^3.0.4", + "node-hook": "^1.0.0" + } + }, + "node_modules/@badeball/cypress-configuration/node_modules/esbuild": { + "version": "0.14.54", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/linux-loong64": "0.14.54", + "esbuild-android-64": "0.14.54", + "esbuild-android-arm64": "0.14.54", + "esbuild-darwin-64": "0.14.54", + "esbuild-darwin-arm64": "0.14.54", + "esbuild-freebsd-64": "0.14.54", + "esbuild-freebsd-arm64": "0.14.54", + "esbuild-linux-32": "0.14.54", + "esbuild-linux-64": "0.14.54", + "esbuild-linux-arm": "0.14.54", + "esbuild-linux-arm64": "0.14.54", + "esbuild-linux-mips64le": "0.14.54", + "esbuild-linux-ppc64le": "0.14.54", + "esbuild-linux-riscv64": "0.14.54", + "esbuild-linux-s390x": "0.14.54", + "esbuild-netbsd-64": "0.14.54", + "esbuild-openbsd-64": "0.14.54", + "esbuild-sunos-64": "0.14.54", + "esbuild-windows-32": "0.14.54", + "esbuild-windows-64": "0.14.54", + "esbuild-windows-arm64": "0.14.54" + } + }, + "node_modules/@badeball/cypress-cucumber-preprocessor": { + "version": "18.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@badeball/cypress-configuration": "^6.1.0", + "@cucumber/cucumber": "^9.1.0", + "@cucumber/cucumber-expressions": "^16.1.2", + "@cucumber/gherkin": "^26.2.0", + "@cucumber/html-formatter": "^20.3.0", + "@cucumber/message-streams": "^4.0.1", + "@cucumber/messages": "^22.0.0", + "@cucumber/pretty-formatter": "^1.0.0", + "@cucumber/tag-expressions": "^5.0.1", + "base64-js": "^1.5.1", + "chalk": "^4.1.2", + "cli-table": "^0.3.11", + "common-ancestor-path": "^1.0.1", + "cosmiconfig": "^8.1.3", + "debug": "^4.3.4", + "error-stack-parser": "^2.1.4", + "esbuild": "^0.17.18", + "glob": "^10.2.2", + "is-path-inside": "^3.0.3", + "mocha": "^10.2.0", + "seedrandom": "^3.0.5", + "source-map": "^0.7.4", + "split": "^1.0.1", + "uuid": "^9.0.0" + }, + "bin": { + "cucumber-html-formatter": "dist/bin/cucumber-html-formatter.js", + "cucumber-json-formatter": "dist/bin/cucumber-json-formatter.js", + "cypress-cucumber-diagnostics": "dist/bin/diagnostics.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@cypress/browserify-preprocessor": "^3.0.1", + "cypress": "^10.0.0 || ^11.0.0 || ^12.0.0" + }, + "peerDependenciesMeta": { + "@cypress/browserify-preprocessor": { + "optional": true + } + } + }, + "node_modules/@badeball/cypress-cucumber-preprocessor/node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@badeball/cypress-cucumber-preprocessor/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@badeball/cypress-cucumber-preprocessor/node_modules/cosmiconfig": { + "version": "8.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/@badeball/cypress-cucumber-preprocessor/node_modules/esbuild": { + "version": "0.17.19", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/@badeball/cypress-cucumber-preprocessor/node_modules/foreground-child": { + "version": "3.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@badeball/cypress-cucumber-preprocessor/node_modules/glob": { + "version": "10.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@badeball/cypress-cucumber-preprocessor/node_modules/minimatch": { + "version": "9.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@badeball/cypress-cucumber-preprocessor/node_modules/parse-json": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@badeball/cypress-cucumber-preprocessor/node_modules/signal-exit": { + "version": "4.0.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@badeball/cypress-cucumber-preprocessor/node_modules/source-map": { + "version": "0.7.4", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@badeball/cypress-cucumber-preprocessor/node_modules/split": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@bahmutov/cypress-code-coverage": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@bahmutov/cypress-code-coverage/-/cypress-code-coverage-2.6.1.tgz", + "integrity": "sha512-oK6RP+537hcIB90QdI4m/u95Pr7YYgbD4PwoDJr924t6viiN8hSc1f3BbD5D8Xuq9JagXLes68l7+lR0cBI9Hg==", + "dev": true, + "dependencies": { + "@actions/core": "^1.10.0", + "@cypress/browserify-preprocessor": "3.0.2", + "chalk": "4.1.2", + "console.table": "^0.10.0", + "dayjs": "1.10.7", + "debug": "4.3.3", + "execa": "4.1.0", + "globby": "11.1.0", + "istanbul-lib-coverage": "3.0.0", + "js-yaml": "3.14.1", + "nyc": "15.1.0", + "rimraf": "^4.4.1", + "sort-array": "^4.1.5" + }, + "bin": { + "cc-merge": "bin/cc-merge.js" + }, + "peerDependencies": { + "cypress": ">=10.0.0" + } + }, + "node_modules/@bahmutov/cypress-code-coverage/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@bahmutov/cypress-code-coverage/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@bahmutov/cypress-code-coverage/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@bahmutov/cypress-code-coverage/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@bahmutov/cypress-code-coverage/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@bahmutov/cypress-code-coverage/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@bahmutov/cypress-code-coverage/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@bahmutov/cypress-code-coverage/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@bahmutov/cypress-code-coverage/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dev": true, + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@bahmutov/cypress-esbuild-preprocessor": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4.3.4" + }, + "peerDependencies": { + "esbuild": ">=0.17.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cucumber/ci-environment": { + "version": "9.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@cucumber/cucumber": { + "version": "9.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@cucumber/ci-environment": "9.2.0", + "@cucumber/cucumber-expressions": "16.1.2", + "@cucumber/gherkin": "26.2.0", + "@cucumber/gherkin-streams": "5.0.1", + "@cucumber/gherkin-utils": "8.0.2", + "@cucumber/html-formatter": "20.3.0", + "@cucumber/message-streams": "4.0.1", + "@cucumber/messages": "22.0.0", + "@cucumber/tag-expressions": "5.0.1", + "assertion-error-formatter": "^3.0.0", + "capital-case": "^1.0.4", + "chalk": "^4.1.2", + "cli-table3": "0.6.3", + "commander": "^10.0.0", + "debug": "^4.3.4", + "error-stack-parser": "^2.1.4", + "figures": "^3.2.0", + "glob": "^7.1.6", + "has-ansi": "^4.0.1", + "indent-string": "^4.0.0", + "is-installed-globally": "^0.4.0", + "is-stream": "^2.0.0", + "knuth-shuffle-seeded": "^1.0.6", + "lodash.merge": "^4.6.2", + "lodash.mergewith": "^4.6.2", + "luxon": "3.2.1", + "mkdirp": "^2.1.5", + "mz": "^2.7.0", + "progress": "^2.0.3", + "resolve-pkg": "^2.0.0", + "semver": "7.3.8", + "string-argv": "^0.3.1", + "strip-ansi": "6.0.1", + "supports-color": "^8.1.1", + "tmp": "^0.2.1", + "util-arity": "^1.1.0", + "verror": "^1.10.0", + "xmlbuilder": "^15.1.1", + "yaml": "^2.2.2", + "yup": "^0.32.11" + }, + "bin": { + "cucumber-js": "bin/cucumber.js" + }, + "engines": { + "node": "14 || 16 || >=18" + } + }, + "node_modules/@cucumber/cucumber-expressions": { + "version": "16.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "regexp-match-indices": "1.0.2" + } + }, + "node_modules/@cucumber/gherkin": { + "version": "26.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@cucumber/messages": ">=19.1.4 <=22" + } + }, + "node_modules/@cucumber/gherkin-streams": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "9.1.0", + "source-map-support": "0.5.21" + }, + "bin": { + "gherkin-javascript": "bin/gherkin" + }, + "peerDependencies": { + "@cucumber/gherkin": ">=22.0.0", + "@cucumber/message-streams": ">=4.0.0", + "@cucumber/messages": ">=17.1.1" + } + }, + "node_modules/@cucumber/gherkin-streams/node_modules/commander": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/@cucumber/gherkin-utils": { + "version": "8.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@cucumber/gherkin": "^25.0.0", + "@cucumber/messages": "^19.1.4", + "@teppeis/multimaps": "2.0.0", + "commander": "9.4.1", + "source-map-support": "^0.5.21" + }, + "bin": { + "gherkin-utils": "bin/gherkin-utils" + } + }, + "node_modules/@cucumber/gherkin-utils/node_modules/@cucumber/gherkin": { + "version": "25.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@cucumber/messages": "^19.1.4" + } + }, + "node_modules/@cucumber/gherkin-utils/node_modules/@cucumber/messages": { + "version": "19.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/uuid": "8.3.4", + "class-transformer": "0.5.1", + "reflect-metadata": "0.1.13", + "uuid": "9.0.0" + } + }, + "node_modules/@cucumber/gherkin-utils/node_modules/@types/uuid": { + "version": "8.3.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@cucumber/gherkin-utils/node_modules/commander": { + "version": "9.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/@cucumber/html-formatter": { + "version": "20.3.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@cucumber/messages": ">=18" + } + }, + "node_modules/@cucumber/message-streams": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@cucumber/messages": ">=17.1.1" + } + }, + "node_modules/@cucumber/messages": { + "version": "22.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/uuid": "9.0.1", + "class-transformer": "0.5.1", + "reflect-metadata": "0.1.13", + "uuid": "9.0.0" + } + }, + "node_modules/@cucumber/pretty-formatter": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^5.0.0", + "cli-table3": "^0.6.0", + "figures": "^3.2.0", + "ts-dedent": "^2.0.0" + }, + "peerDependencies": { + "@cucumber/cucumber": ">=7.0.0", + "@cucumber/messages": "*" + } + }, + "node_modules/@cucumber/pretty-formatter/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@cucumber/tag-expressions": { + "version": "5.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@cypress/browserify-preprocessor": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-object-rest-spread": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.0", + "@babel/preset-env": "^7.16.0", + "@babel/preset-react": "^7.16.0", + "@babel/runtime": "^7.16.0", + "babel-plugin-add-module-exports": "^1.0.4", + "babelify": "^10.0.0", + "bluebird": "^3.7.2", + "browserify": "^16.2.3", + "coffeeify": "^3.0.1", + "coffeescript": "^1.12.7", + "debug": "^4.3.2", + "fs-extra": "^9.0.0", + "lodash.clonedeep": "^4.5.0", + "through2": "^2.0.0", + "watchify": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@cypress/code-coverage": { + "version": "3.10.7", + "resolved": "https://registry.npmjs.org/@cypress/code-coverage/-/code-coverage-3.10.7.tgz", + "integrity": "sha512-kQFB8GemDAAk6JBINsR9MLEgCw2AKb3FcdHQjIJ3KV4ZER6ZF0NGdO8SRj5oTVp28oqfOab4cgoBdecRiOE3qA==", + "dev": true, + "dependencies": { + "@cypress/webpack-preprocessor": "^5.11.0", + "chalk": "4.1.2", + "dayjs": "1.10.7", + "debug": "4.3.4", + "execa": "4.1.0", + "globby": "11.0.4", + "istanbul-lib-coverage": "3.0.0", + "js-yaml": "4.1.0", + "nyc": "15.1.0" + }, + "peerDependencies": { + "cypress": "*" + } + }, + "node_modules/@cypress/request": { + "version": "2.88.11", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.10.3", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/request/node_modules/form-data": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/@cypress/request/node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@cypress/webpack-preprocessor": { + "version": "5.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bluebird": "3.7.1", + "debug": "^4.3.4", + "lodash": "^4.17.20" + }, + "peerDependencies": { + "@babel/core": "^7.0.1", + "@babel/preset-env": "^7.0.0", + "babel-loader": "^8.0.2 || ^9", + "webpack": "^4 || ^5" + } + }, + "node_modules/@cypress/webpack-preprocessor/node_modules/bluebird": { + "version": "3.7.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.8", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.43.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@hookform/resolvers": { + "version": "3.1.1", + "license": "MIT", + "peerDependencies": { + "react-hook-form": "^7.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/nyc-config-typescript": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "nyc": ">=15" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.4.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.25.16" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.4.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true, + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@remix-run/router": { + "version": "1.7.0", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sinclair/typebox": { + "version": "0.25.24", + "dev": true, + "license": "MIT" + }, + "node_modules/@teppeis/multimaps": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.17" + } + }, + "node_modules/@testing-library/dom": { + "version": "9.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.1.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.16.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "14.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "4.3.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai-subset": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.40.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.14.195", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.2.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/uuid": { + "version": "9.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.24", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.60.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/type-utils": "5.60.0", + "@typescript-eslint/utils": "5.60.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.60.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/typescript-estree": "5.60.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.60.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/visitor-keys": "5.60.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.60.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.60.0", + "@typescript-eslint/utils": "5.60.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.60.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.60.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/visitor-keys": "5.60.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.60.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/typescript-estree": "5.60.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.60.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.60.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.22.5", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0" + } + }, + "node_modules/@vitest/coverage-c8": { + "version": "0.31.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "c8": "^7.13.0", + "magic-string": "^0.30.0", + "picocolors": "^1.0.0", + "std-env": "^3.3.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": ">=0.30.0 <1" + } + }, + "node_modules/@vitest/expect": { + "version": "0.31.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "0.31.4", + "@vitest/utils": "0.31.4", + "chai": "^4.3.7" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "0.31.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "0.31.4", + "concordance": "^5.0.4", + "p-limit": "^4.0.0", + "pathe": "^1.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "0.31.4", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "pretty-format": "^27.5.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "0.31.4", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^2.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "0.31.4", + "dev": true, + "license": "MIT", + "dependencies": { + "concordance": "^5.0.4", + "loupe": "^2.3.6", + "pretty-format": "^27.5.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "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" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@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" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, + "node_modules/abab": { + "version": "2.0.6", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/acorn": { + "version": "8.9.0", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-transform": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/archy": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/arg": { + "version": "5.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-back": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-5.0.0.tgz", + "integrity": "sha512-kgVWwJReZWmVuWOQKEOohXKJX+nD02JAZ54D1RRWlv8L0NebauKAaFxACKzB74RTclt1+WNz5KHaLRDAPZbDEw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/assert": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/assertion-error-formatter": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "diff": "^4.0.1", + "pad-right": "^0.2.2", + "repeat-string": "^1.6.1" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-add-module-exports": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babelify": { + "version": "10.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "dev": true, + "license": "MIT" + }, + "node_modules/blueimp-md5": { + "version": "2.19.0", + "dev": true, + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/browser-pack": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "JSONStream": "^1.0.3", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + }, + "bin": { + "browser-pack": "bin/cmd.js" + } + }, + "node_modules/browser-resolve": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.17.0" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "dev": true, + "license": "ISC" + }, + "node_modules/browserify": { + "version": "16.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^2.0.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^2.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.2.3", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^2.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "dev": true, + "license": "ISC", + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/c8": { + "version": "7.14.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/c8/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cached-path-relative": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cachedir": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caching-transform": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001507", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/capital-case": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/chai": { + "version": "4.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/class-transformer": { + "version": "0.5.1", + "dev": true, + "license": "MIT" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table": { + "version": "0.3.11", + "dev": true, + "dependencies": { + "colors": "1.0.3" + }, + "engines": { + "node": ">= 0.2.0" + } + }, + "node_modules/cli-table/node_modules/colors": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/coffeeify": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "convert-source-map": "^1.3.0", + "through2": "^2.0.0" + }, + "peerDependencies": { + "coffeescript": ">1.9.2 <3" + } + }, + "node_modules/coffeescript": { + "version": "1.12.7", + "dev": true, + "license": "MIT", + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "dev": true, + "license": "MIT" + }, + "node_modules/combine-source-map": { + "version": "0.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + } + }, + "node_modules/combine-source-map/node_modules/convert-source-map": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/common-tags": { + "version": "1.8.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concordance": { + "version": "5.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "date-time": "^3.1.0", + "esutils": "^2.0.3", + "fast-diff": "^1.2.0", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.15", + "md5-hex": "^3.0.1", + "semver": "^7.3.2", + "well-known-symbols": "^2.0.0" + }, + "engines": { + "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "dev": true + }, + "node_modules/console.table": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/console.table/-/console.table-0.10.0.tgz", + "integrity": "sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==", + "dev": true, + "dependencies": { + "easy-table": "1.1.0" + }, + "engines": { + "node": "> 0.10" + } + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.31.0", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/cypress": { + "version": "12.15.0", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.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.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^14.0.0 || ^16.0.0 || >=18.0.0" + } + }, + "node_modules/cypress/node_modules/@types/node": { + "version": "14.18.51", + "dev": true, + "license": "MIT" + }, + "node_modules/cypress/node_modules/buffer": { + "version": "5.7.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/cypress/node_modules/commander": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cypress/node_modules/proxy-from-env": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/dash-ast": { + "version": "1.0.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/date-time": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "time-zone": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dayjs": { + "version": "1.10.7", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-equal": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/default-require-extensions": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "optional": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/defined": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/deps-sort": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + }, + "bin": { + "deps-sort": "bin/cmd.js" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/detective": { + "version": "5.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.4.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "dev": true, + "license": "MIT" + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/easy-table": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz", + "integrity": "sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==", + "dev": true, + "optionalDependencies": { + "wcwidth": ">=1.0.1" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.440", + "dev": true, + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/es6-error": { + "version": "4.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.18.8", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.8", + "@esbuild/android-arm64": "0.18.8", + "@esbuild/android-x64": "0.18.8", + "@esbuild/darwin-arm64": "0.18.8", + "@esbuild/darwin-x64": "0.18.8", + "@esbuild/freebsd-arm64": "0.18.8", + "@esbuild/freebsd-x64": "0.18.8", + "@esbuild/linux-arm": "0.18.8", + "@esbuild/linux-arm64": "0.18.8", + "@esbuild/linux-ia32": "0.18.8", + "@esbuild/linux-loong64": "0.18.8", + "@esbuild/linux-mips64el": "0.18.8", + "@esbuild/linux-ppc64": "0.18.8", + "@esbuild/linux-riscv64": "0.18.8", + "@esbuild/linux-s390x": "0.18.8", + "@esbuild/linux-x64": "0.18.8", + "@esbuild/netbsd-x64": "0.18.8", + "@esbuild/openbsd-x64": "0.18.8", + "@esbuild/sunos-x64": "0.18.8", + "@esbuild/win32-arm64": "0.18.8", + "@esbuild/win32-ia32": "0.18.8", + "@esbuild/win32-x64": "0.18.8" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.54", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.43.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.3.5", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.5.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-stream": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/executable": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/expect": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.15.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/from": { + "version": "0.1.7", + "dev": true, + "license": "MIT" + }, + "node_modules/fromentries": { + "version": "1.3.2", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-assigned-identifiers": { + "version": "1.2.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getos": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "license": "ISC" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasha": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlescape": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/husky": { + "version": "8.0.3", + "dev": true, + "license": "MIT", + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/inline-source-map": { + "version": "0.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.5.3" + } + }, + "node_modules/insert-module-globals": { + "version": "7.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + }, + "bin": { + "insert-module-globals": "bin/cmd.js" + } + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isstream": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.2.1", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest-diff": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-get-type": { + "version": "29.4.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-message-util": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-util": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/joi": { + "version": "17.9.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-string-escape": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "22.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", + "domexception": "^4.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/punycode": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.1.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/node_modules/universalify": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonify": { + "version": "0.0.1", + "dev": true, + "license": "Public Domain", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/jsprim/node_modules/core-util-is": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/jsprim/node_modules/verror": { + "version": "1.10.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/knuth-shuffle-seeded": { + "version": "1.0.6", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "seed-random": "~2.2.0" + } + }, + "node_modules/labeled-stream-splicer": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "> 0.8" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2": { + "version": "3.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/local-pkg": { + "version": "0.4.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "3.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "2.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/luxon": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/map-stream": { + "version": "0.1.0", + "dev": true + }, + "node_modules/md5-hex": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "blueimp-md5": "^2.10.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "2.1.6", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "dev": true, + "license": "MIT" + }, + "node_modules/mlly": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.9.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "ufo": "^1.1.2" + } + }, + "node_modules/mocha": { + "version": "10.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/mocha/node_modules/diff": { + "version": "5.0.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha/node_modules/nanoid": { + "version": "3.3.3", + "dev": true, + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/mocha/node_modules/serialize-javascript": { + "version": "6.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/module-deps": { + "version": "6.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "JSONStream": "^1.0.3", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoclone": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.6", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-hook": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/node-preload": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "2.0.12", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.5", + "dev": true, + "license": "MIT" + }, + "node_modules/nyc": { + "version": "15.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ospath": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/outpipe": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "shell-quote": "^1.4.2" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pad-right": { + "version": "0.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parents": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-platform": "~0.11.15" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "dev": true, + "license": "ISC", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-platform": { + "version": "0.11.15", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/path-scurry": { + "version": "1.9.2", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.2", + "dev": true, + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/pause-stream": { + "version": "0.0.11", + "dev": true, + "license": [ + "MIT", + "Apache2" + ], + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-types": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "node_modules/postcss": { + "version": "8.4.24", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/property-expr": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/ps-tree": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.10.4", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-hook-form": { + "version": "7.45.0", + "license": "MIT", + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.14.0", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.7.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.14.0", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.7.0", + "react-router": "6.14.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/read-only-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp-match-indices": { + "version": "1.0.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "regexp-tree": "^0.1.11" + } + }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "dev": true, + "license": "MIT", + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request-progress": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rollup": { + "version": "3.25.2", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "dev": true, + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.12.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/seed-random": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/seedrandom": { + "version": "3.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shasum": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" + } + }, + "node_modules/shasum-object": { + "version": "1.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "fast-safe-stringify": "^2.0.7" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sort-array": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/sort-array/-/sort-array-4.1.5.tgz", + "integrity": "sha512-Ya4peoS1fgFN42RN1REk2FgdNOeLIEMKFGJvs7VTP3OklF8+kl2SkpVliZ4tk/PurWsrWRsdNdU+tgyOBkB9sA==", + "dev": true, + "dependencies": { + "array-back": "^5.0.0", + "typical": "^6.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/split": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/stackframe": { + "version": "1.3.4", + "dev": true, + "license": "MIT" + }, + "node_modules/start-server-and-test": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "arg": "^5.0.2", + "bluebird": "3.7.2", + "check-more-types": "2.24.0", + "debug": "4.3.4", + "execa": "5.1.1", + "lazy-ass": "1.6.0", + "ps-tree": "1.2.0", + "wait-on": "7.0.1" + }, + "bin": { + "server-test": "src/bin/start.js", + "start-server-and-test": "src/bin/start.js", + "start-test": "src/bin/start.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/start-server-and-test/node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/start-server-and-test/node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/start-server-and-test/node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/std-env": { + "version": "3.3.3", + "dev": true, + "license": "MIT" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-combiner": { + "version": "0.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1" + } + }, + "node_modules/stream-combiner2": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-http": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "3.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-splicer": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.8.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/subarg": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.1.0" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/syntax-error": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn-node": "^1.2.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.18.1", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throttleit": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/time-zone": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/timers-browserify": { + "version": "1.4.2", + "dev": true, + "dependencies": { + "process": "~0.11.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tinybench": { + "version": "2.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toposort": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/tslib": { + "version": "2.5.3", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.1.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typical": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-6.0.1.tgz", + "integrity": "sha512-+g3NEp7fJLe9DPa1TArHm9QAA7YciZmWnfAqEaFrBihQ7epOv9i99rjtgb6Iz0wh3WuQDjsCTDfgRoGnmHN81A==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ufo": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/umd": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "bin": { + "umd": "bin/cli.js" + } + }, + "node_modules/undeclared-identifiers": { + "version": "1.1.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + }, + "bin": { + "undeclared-identifiers": "bin.js" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/url": { + "version": "0.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/qs": { + "version": "6.11.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/util": { + "version": "0.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-arity": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/uuid": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/verror": { + "version": "1.10.1", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "4.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "0.31.4", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.2.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-plugin-istanbul": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.1.0", + "istanbul-lib-instrument": "^5.1.0", + "picocolors": "^1.0.0", + "test-exclude": "^6.0.0" + }, + "peerDependencies": { + "vite": ">=2.9.1 <= 5" + } + }, + "node_modules/vite-plugin-istanbul/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/vite-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vite-plugin-istanbul/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.17.19", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/vitest": { + "version": "0.31.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.31.4", + "@vitest/runner": "0.31.4", + "@vitest/snapshot": "0.31.4", + "@vitest/spy": "0.31.4", + "@vitest/utils": "0.31.4", + "acorn": "^8.8.2", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.7", + "concordance": "^5.0.4", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "std-env": "^3.3.2", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.5.0", + "vite": "^3.0.0 || ^4.0.0", + "vite-node": "0.31.4", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/acorn-walk": { + "version": "8.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/wait-on": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "^0.27.2", + "joi": "^17.7.0", + "lodash": "^4.17.21", + "minimist": "^1.2.7", + "rxjs": "^7.8.0" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/wait-on/node_modules/axios": { + "version": "0.27.2", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/watchify": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.0", + "browserify": "^17.0.0", + "chokidar": "^3.4.0", + "defined": "^1.0.0", + "outpipe": "^1.1.0", + "through2": "^4.0.2", + "xtend": "^4.0.2" + }, + "bin": { + "watchify": "bin/cmd.js" + }, + "engines": { + "node": ">= 8.10.0" + } + }, + "node_modules/watchify/node_modules/browserify": { + "version": "17.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^2.0.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.1", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^3.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.2.1", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.2.3", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "^1.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum-object": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^3.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.12.0", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/watchify/node_modules/browserify/node_modules/through2": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/watchify/node_modules/events": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/watchify/node_modules/path-browserify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/watchify/node_modules/stream-browserify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/watchify/node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/watchify/node_modules/through2": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/watchify/node_modules/through2/node_modules/readable-stream": { + "version": "3.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/watchify/node_modules/util": { + "version": "0.12.5", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "optional": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.88.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/events": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/well-known-symbols": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=6" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "12.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.2.1", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "8.13.0", + "dev": true, + "license": "MIT", + "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 + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/xtend": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.3.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yup": { + "version": "0.32.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.15.4", + "@types/lodash": "^4.14.175", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "nanoclone": "^0.2.1", + "property-expr": "^2.0.4", + "toposort": "^2.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/zod": { + "version": "3.21.4", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + }, + "dependencies": { + "@actions/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz", + "integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==", + "dev": true, + "requires": { + "@actions/http-client": "^2.0.1", + "uuid": "^8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "@actions/http-client": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.1.0.tgz", + "integrity": "sha512-BonhODnXr3amchh4qkmjPMUO8mFi/zLaaCeCAJZqch8iQqyDnVIkySjB38VHAC8IJ+bnlgfOqlhpyCUZHlQsqw==", + "dev": true, + "requires": { + "tunnel": "^0.0.6" + } + }, + "@adobe/css-tools": { + "version": "4.2.0", + "dev": true + }, + "@ampproject/remapping": { + "version": "2.2.1", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/compat-data": { + "version": "7.22.5", + "dev": true + }, + "@babel/core": { + "version": "7.22.5", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helpers": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/highlight": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.22.5", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "dev": true, + "requires": {} + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@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.5", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.22.5", + "dev": true, + "requires": { + "@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/plugin-transform-parameters": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.22.5" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.22.5" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "dev": true + }, + "@babel/runtime": { + "version": "7.22.5", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/traverse": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@badeball/cypress-configuration": { + "version": "6.1.0", + "dev": true, + "requires": { + "@babel/parser": "^7.18.8", + "debug": "^4.3.2", + "esbuild": "^0.14.23", + "glob": "^7.1.6", + "minimatch": "^3.0.4", + "node-hook": "^1.0.0" + }, + "dependencies": { + "esbuild": { + "version": "0.14.54", + "dev": true, + "requires": { + "@esbuild/linux-loong64": "0.14.54", + "esbuild-android-64": "0.14.54", + "esbuild-android-arm64": "0.14.54", + "esbuild-darwin-64": "0.14.54", + "esbuild-darwin-arm64": "0.14.54", + "esbuild-freebsd-64": "0.14.54", + "esbuild-freebsd-arm64": "0.14.54", + "esbuild-linux-32": "0.14.54", + "esbuild-linux-64": "0.14.54", + "esbuild-linux-arm": "0.14.54", + "esbuild-linux-arm64": "0.14.54", + "esbuild-linux-mips64le": "0.14.54", + "esbuild-linux-ppc64le": "0.14.54", + "esbuild-linux-riscv64": "0.14.54", + "esbuild-linux-s390x": "0.14.54", + "esbuild-netbsd-64": "0.14.54", + "esbuild-openbsd-64": "0.14.54", + "esbuild-sunos-64": "0.14.54", + "esbuild-windows-32": "0.14.54", + "esbuild-windows-64": "0.14.54", + "esbuild-windows-arm64": "0.14.54" + } + } + } + }, + "@badeball/cypress-cucumber-preprocessor": { + "version": "18.0.1", + "dev": true, + "requires": { + "@badeball/cypress-configuration": "^6.1.0", + "@cucumber/cucumber": "^9.1.0", + "@cucumber/cucumber-expressions": "^16.1.2", + "@cucumber/gherkin": "^26.2.0", + "@cucumber/html-formatter": "^20.3.0", + "@cucumber/message-streams": "^4.0.1", + "@cucumber/messages": "^22.0.0", + "@cucumber/pretty-formatter": "^1.0.0", + "@cucumber/tag-expressions": "^5.0.1", + "base64-js": "^1.5.1", + "chalk": "^4.1.2", + "cli-table": "^0.3.11", + "common-ancestor-path": "^1.0.1", + "cosmiconfig": "^8.1.3", + "debug": "^4.3.4", + "error-stack-parser": "^2.1.4", + "esbuild": "^0.17.18", + "glob": "^10.2.2", + "is-path-inside": "^3.0.3", + "mocha": "^10.2.0", + "seedrandom": "^3.0.5", + "source-map": "^0.7.4", + "split": "^1.0.1", + "uuid": "^9.0.0" + }, + "dependencies": { + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cosmiconfig": { + "version": "8.2.0", + "dev": true, + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + } + }, + "esbuild": { + "version": "0.17.19", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "foreground-child": { + "version": "3.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.3.0", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + } + }, + "minimatch": { + "version": "9.0.2", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "parse-json": { + "version": "5.2.0", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "signal-exit": { + "version": "4.0.2", + "dev": true + }, + "source-map": { + "version": "0.7.4", + "dev": true + }, + "split": { + "version": "1.0.1", + "dev": true, + "requires": { + "through": "2" + } + } + } + }, + "@bahmutov/cypress-code-coverage": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@bahmutov/cypress-code-coverage/-/cypress-code-coverage-2.6.1.tgz", + "integrity": "sha512-oK6RP+537hcIB90QdI4m/u95Pr7YYgbD4PwoDJr924t6viiN8hSc1f3BbD5D8Xuq9JagXLes68l7+lR0cBI9Hg==", + "dev": true, + "requires": { + "@actions/core": "^1.10.0", + "@cypress/browserify-preprocessor": "3.0.2", + "chalk": "4.1.2", + "console.table": "^0.10.0", + "dayjs": "1.10.7", + "debug": "4.3.3", + "execa": "4.1.0", + "globby": "11.1.0", + "istanbul-lib-coverage": "3.0.0", + "js-yaml": "3.14.1", + "nyc": "15.1.0", + "rimraf": "^4.4.1", + "sort-array": "^4.1.5" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true + }, + "rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dev": true, + "requires": { + "glob": "^9.2.0" + } + } + } + }, + "@bahmutov/cypress-esbuild-preprocessor": { + "version": "2.2.0", + "dev": true, + "requires": { + "debug": "4.3.4" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true + }, + "@colors/colors": { + "version": "1.5.0", + "dev": true, + "optional": true + }, + "@cucumber/ci-environment": { + "version": "9.2.0", + "dev": true + }, + "@cucumber/cucumber": { + "version": "9.2.0", + "dev": true, + "requires": { + "@cucumber/ci-environment": "9.2.0", + "@cucumber/cucumber-expressions": "16.1.2", + "@cucumber/gherkin": "26.2.0", + "@cucumber/gherkin-streams": "5.0.1", + "@cucumber/gherkin-utils": "8.0.2", + "@cucumber/html-formatter": "20.3.0", + "@cucumber/message-streams": "4.0.1", + "@cucumber/messages": "22.0.0", + "@cucumber/tag-expressions": "5.0.1", + "assertion-error-formatter": "^3.0.0", + "capital-case": "^1.0.4", + "chalk": "^4.1.2", + "cli-table3": "0.6.3", + "commander": "^10.0.0", + "debug": "^4.3.4", + "error-stack-parser": "^2.1.4", + "figures": "^3.2.0", + "glob": "^7.1.6", + "has-ansi": "^4.0.1", + "indent-string": "^4.0.0", + "is-installed-globally": "^0.4.0", + "is-stream": "^2.0.0", + "knuth-shuffle-seeded": "^1.0.6", + "lodash.merge": "^4.6.2", + "lodash.mergewith": "^4.6.2", + "luxon": "3.2.1", + "mkdirp": "^2.1.5", + "mz": "^2.7.0", + "progress": "^2.0.3", + "resolve-pkg": "^2.0.0", + "semver": "7.3.8", + "string-argv": "^0.3.1", + "strip-ansi": "6.0.1", + "supports-color": "^8.1.1", + "tmp": "^0.2.1", + "util-arity": "^1.1.0", + "verror": "^1.10.0", + "xmlbuilder": "^15.1.1", + "yaml": "^2.2.2", + "yup": "^0.32.11" + } + }, + "@cucumber/cucumber-expressions": { + "version": "16.1.2", + "dev": true, + "requires": { + "regexp-match-indices": "1.0.2" + } + }, + "@cucumber/gherkin": { + "version": "26.2.0", + "dev": true, + "requires": { + "@cucumber/messages": ">=19.1.4 <=22" + } + }, + "@cucumber/gherkin-streams": { + "version": "5.0.1", + "dev": true, + "requires": { + "commander": "9.1.0", + "source-map-support": "0.5.21" + }, + "dependencies": { + "commander": { + "version": "9.1.0", + "dev": true + } + } + }, + "@cucumber/gherkin-utils": { + "version": "8.0.2", + "dev": true, + "requires": { + "@cucumber/gherkin": "^25.0.0", + "@cucumber/messages": "^19.1.4", + "@teppeis/multimaps": "2.0.0", + "commander": "9.4.1", + "source-map-support": "^0.5.21" + }, + "dependencies": { + "@cucumber/gherkin": { + "version": "25.0.2", + "dev": true, + "requires": { + "@cucumber/messages": "^19.1.4" + } + }, + "@cucumber/messages": { + "version": "19.1.4", + "dev": true, + "requires": { + "@types/uuid": "8.3.4", + "class-transformer": "0.5.1", + "reflect-metadata": "0.1.13", + "uuid": "9.0.0" + } + }, + "@types/uuid": { + "version": "8.3.4", + "dev": true + }, + "commander": { + "version": "9.4.1", + "dev": true + } + } + }, + "@cucumber/html-formatter": { + "version": "20.3.0", + "dev": true, + "requires": {} + }, + "@cucumber/message-streams": { + "version": "4.0.1", + "dev": true, + "requires": {} + }, + "@cucumber/messages": { + "version": "22.0.0", + "dev": true, + "requires": { + "@types/uuid": "9.0.1", + "class-transformer": "0.5.1", + "reflect-metadata": "0.1.13", + "uuid": "9.0.0" + } + }, + "@cucumber/pretty-formatter": { + "version": "1.0.0", + "dev": true, + "requires": { + "ansi-styles": "^5.0.0", + "cli-table3": "^0.6.0", + "figures": "^3.2.0", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "dev": true + } + } + }, + "@cucumber/tag-expressions": { + "version": "5.0.1", + "dev": true + }, + "@cypress/browserify-preprocessor": { + "version": "3.0.2", + "dev": true, + "requires": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-object-rest-spread": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.0", + "@babel/preset-env": "^7.16.0", + "@babel/preset-react": "^7.16.0", + "@babel/runtime": "^7.16.0", + "babel-plugin-add-module-exports": "^1.0.4", + "babelify": "^10.0.0", + "bluebird": "^3.7.2", + "browserify": "^16.2.3", + "coffeeify": "^3.0.1", + "coffeescript": "^1.12.7", + "debug": "^4.3.2", + "fs-extra": "^9.0.0", + "lodash.clonedeep": "^4.5.0", + "through2": "^2.0.0", + "watchify": "^4.0.0" + } + }, + "@cypress/code-coverage": { + "version": "3.10.7", + "resolved": "https://registry.npmjs.org/@cypress/code-coverage/-/code-coverage-3.10.7.tgz", + "integrity": "sha512-kQFB8GemDAAk6JBINsR9MLEgCw2AKb3FcdHQjIJ3KV4ZER6ZF0NGdO8SRj5oTVp28oqfOab4cgoBdecRiOE3qA==", + "dev": true, + "requires": { + "@cypress/webpack-preprocessor": "^5.11.0", + "chalk": "4.1.2", + "dayjs": "1.10.7", + "debug": "4.3.4", + "execa": "4.1.0", + "globby": "11.0.4", + "istanbul-lib-coverage": "3.0.0", + "js-yaml": "4.1.0", + "nyc": "15.1.0" + } + }, + "@cypress/request": { + "version": "2.88.11", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.10.3", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "uuid": { + "version": "8.3.2", + "dev": true + } + } + }, + "@cypress/webpack-preprocessor": { + "version": "5.17.1", + "dev": true, + "requires": { + "bluebird": "3.7.1", + "debug": "^4.3.4", + "lodash": "^4.17.20" + }, + "dependencies": { + "bluebird": { + "version": "3.7.1", + "dev": true + } + } + }, + "@cypress/xvfb": { + "version": "1.2.4", + "dev": true, + "requires": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@esbuild/darwin-arm64": { + "version": "0.18.8", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.5.1", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.0.3", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.20.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "dev": true + } + } + }, + "@eslint/js": { + "version": "8.43.0", + "dev": true + }, + "@hapi/hoek": { + "version": "9.3.0", + "dev": true + }, + "@hapi/topo": { + "version": "5.1.0", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@hookform/resolvers": { + "version": "3.1.1", + "requires": {} + }, + "@humanwhocodes/config-array": { + "version": "0.11.10", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "dev": true + } + } + }, + "@istanbuljs/nyc-config-typescript": { + "version": "1.0.2", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true + }, + "@jest/expect-utils": { + "version": "29.5.0", + "dev": true, + "requires": { + "jest-get-type": "^29.4.3" + } + }, + "@jest/schemas": { + "version": "29.4.3", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.25.16" + } + }, + "@jest/types": { + "version": "29.5.0", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.3", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "dev": true, + "optional": true + }, + "@remix-run/router": { + "version": "1.7.0" + }, + "@sideway/address": { + "version": "4.1.4", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.1", + "dev": true + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "dev": true + }, + "@sinclair/typebox": { + "version": "0.25.24", + "dev": true + }, + "@teppeis/multimaps": { + "version": "2.0.0", + "dev": true + }, + "@testing-library/dom": { + "version": "9.3.1", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "aria-query": { + "version": "5.1.3", + "dev": true, + "requires": { + "deep-equal": "^2.0.5" + } + } + } + }, + "@testing-library/jest-dom": { + "version": "5.16.5", + "dev": true, + "requires": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@testing-library/react": { + "version": "14.0.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "dev": true + }, + "@types/aria-query": { + "version": "5.0.1", + "dev": true + }, + "@types/chai": { + "version": "4.3.5", + "dev": true + }, + "@types/chai-subset": { + "version": "1.3.3", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, + "@types/eslint": { + "version": "8.40.2", + "dev": true, + "peer": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "peer": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "29.5.2", + "dev": true, + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "dev": true + }, + "pretty-format": { + "version": "29.5.0", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "dev": true + } + } + }, + "@types/json-schema": { + "version": "7.0.12", + "dev": true + }, + "@types/lodash": { + "version": "4.14.195", + "dev": true + }, + "@types/node": { + "version": "20.3.1", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.5", + "dev": true + }, + "@types/react": { + "version": "18.2.14", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.2.6", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.3", + "dev": true + }, + "@types/semver": { + "version": "7.5.0", + "dev": true + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.1", + "dev": true + }, + "@types/sizzle": { + "version": "2.3.3", + "dev": true + }, + "@types/stack-utils": { + "version": "2.0.1", + "dev": true + }, + "@types/testing-library__jest-dom": { + "version": "5.14.6", + "dev": true, + "requires": { + "@types/jest": "*" + } + }, + "@types/uuid": { + "version": "9.0.1", + "dev": true + }, + "@types/yargs": { + "version": "17.0.24", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "dev": true + }, + "@types/yauzl": { + "version": "2.10.0", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.60.0", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/type-utils": "5.60.0", + "@typescript-eslint/utils": "5.60.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.60.0", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/typescript-estree": "5.60.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.60.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/visitor-keys": "5.60.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.60.0", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.60.0", + "@typescript-eslint/utils": "5.60.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.60.0", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.60.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/visitor-keys": "5.60.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "globby": { + "version": "11.1.0", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.60.0", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/typescript-estree": "5.60.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.60.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@vitejs/plugin-react": { + "version": "4.0.1", + "dev": true, + "requires": { + "@babel/core": "^7.22.5", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "react-refresh": "^0.14.0" + } + }, + "@vitest/coverage-c8": { + "version": "0.31.4", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.1", + "c8": "^7.13.0", + "magic-string": "^0.30.0", + "picocolors": "^1.0.0", + "std-env": "^3.3.2" + } + }, + "@vitest/expect": { + "version": "0.31.4", + "dev": true, + "requires": { + "@vitest/spy": "0.31.4", + "@vitest/utils": "0.31.4", + "chai": "^4.3.7" + } + }, + "@vitest/runner": { + "version": "0.31.4", + "dev": true, + "requires": { + "@vitest/utils": "0.31.4", + "concordance": "^5.0.4", + "p-limit": "^4.0.0", + "pathe": "^1.1.0" + }, + "dependencies": { + "p-limit": { + "version": "4.0.0", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "yocto-queue": { + "version": "1.0.0", + "dev": true + } + } + }, + "@vitest/snapshot": { + "version": "0.31.4", + "dev": true, + "requires": { + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "pretty-format": "^27.5.1" + } + }, + "@vitest/spy": { + "version": "0.31.4", + "dev": true, + "requires": { + "tinyspy": "^2.1.0" + } + }, + "@vitest/utils": { + "version": "0.31.4", + "dev": true, + "requires": { + "concordance": "^5.0.4", + "loupe": "^2.3.6", + "pretty-format": "^27.5.1" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.6", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "dev": true, + "peer": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "dev": true, + "peer": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "dev": true, + "peer": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "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" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@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" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.6", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "dev": true, + "peer": true + }, + "abab": { + "version": "2.0.6", + "dev": true + }, + "acorn": { + "version": "8.9.0", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "dev": true, + "peer": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "acorn-node": { + "version": "1.8.2", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "dev": true + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "dev": true, + "requires": { + "debug": "4" + } + }, + "aggregate-error": { + "version": "3.1.0", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "dev": true, + "peer": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "peer": true + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "peer": true, + "requires": {} + }, + "ansi-colors": { + "version": "4.1.3", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "4.1.1", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "any-promise": { + "version": "1.3.0", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "append-transform": { + "version": "2.0.0", + "dev": true, + "requires": { + "default-require-extensions": "^3.0.0" + } + }, + "arch": { + "version": "2.2.0", + "dev": true + }, + "archy": { + "version": "1.0.0", + "dev": true + }, + "arg": { + "version": "5.0.2", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "dev": true + }, + "aria-query": { + "version": "5.3.0", + "dev": true, + "requires": { + "dequal": "^2.0.3" + } + }, + "array-back": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-5.0.0.tgz", + "integrity": "sha512-kgVWwJReZWmVuWOQKEOohXKJX+nD02JAZ54D1RRWlv8L0NebauKAaFxACKzB74RTclt1+WNz5KHaLRDAPZbDEw==", + "dev": true + }, + "array-buffer-byte-length": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, + "array-union": { + "version": "2.1.0", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "dev": true + }, + "util": { + "version": "0.10.3", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "dev": true + }, + "assertion-error-formatter": { + "version": "3.0.0", + "dev": true, + "requires": { + "diff": "^4.0.1", + "pad-right": "^0.2.2", + "repeat-string": "^1.6.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "dev": true + }, + "async": { + "version": "3.2.4", + "dev": true + }, + "asynckit": { + "version": "0.4.0" + }, + "at-least-node": { + "version": "1.0.0", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "dev": true + }, + "aws4": { + "version": "1.12.0", + "dev": true + }, + "axios": { + "version": "1.4.0", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "babel-loader": { + "version": "9.1.2", + "dev": true, + "peer": true, + "requires": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + } + }, + "babel-plugin-add-module-exports": { + "version": "1.0.4", + "dev": true + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + } + }, + "babelify": { + "version": "10.0.0", + "dev": true, + "requires": {} + }, + "balanced-match": { + "version": "1.0.2", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "2.2.0", + "dev": true + }, + "blob-util": { + "version": "2.0.2", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "dev": true + }, + "blueimp-md5": { + "version": "2.19.0", + "dev": true + }, + "bn.js": { + "version": "5.2.1", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "dev": true + }, + "browser-pack": { + "version": "6.1.0", + "dev": true, + "requires": { + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "JSONStream": "^1.0.3", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + } + }, + "browser-resolve": { + "version": "2.0.0", + "dev": true, + "requires": { + "resolve": "^1.17.0" + } + }, + "browser-stdout": { + "version": "1.3.1", + "dev": true + }, + "browserify": { + "version": "16.5.2", + "dev": true, + "requires": { + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^2.0.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^2.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.2.3", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^2.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "browserify-aes": { + "version": "1.2.0", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.21.9", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } + }, + "buffer": { + "version": "5.2.1", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "dev": true + }, + "c8": { + "version": "7.14.0", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + } + } + }, + "cac": { + "version": "6.7.14", + "dev": true + }, + "cached-path-relative": { + "version": "1.1.0", + "dev": true + }, + "cachedir": { + "version": "2.3.0", + "dev": true + }, + "caching-transform": { + "version": "4.0.0", + "dev": true, + "requires": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001507", + "dev": true + }, + "capital-case": { + "version": "1.0.4", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "caseless": { + "version": "0.12.0", + "dev": true + }, + "chai": { + "version": "4.3.7", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "check-error": { + "version": "1.0.2", + "dev": true + }, + "check-more-types": { + "version": "2.24.0", + "dev": true + }, + "chokidar": { + "version": "3.5.2", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "dev": true, + "peer": true + }, + "ci-info": { + "version": "3.8.0", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-transformer": { + "version": "0.5.1", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-table": { + "version": "0.3.11", + "dev": true, + "requires": { + "colors": "1.0.3" + }, + "dependencies": { + "colors": { + "version": "1.0.3", + "dev": true + } + } + }, + "cli-table3": { + "version": "0.6.3", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "optional": true + }, + "coffeeify": { + "version": "3.0.1", + "dev": true, + "requires": { + "convert-source-map": "^1.3.0", + "through2": "^2.0.0" + } + }, + "coffeescript": { + "version": "1.12.7", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "dev": true + }, + "combine-source-map": { + "version": "0.8.0", + "dev": true, + "requires": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + }, + "dependencies": { + "convert-source-map": { + "version": "1.1.3", + "dev": true + } + } + }, + "combined-stream": { + "version": "1.0.8", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "10.0.1", + "dev": true + }, + "common-ancestor-path": { + "version": "1.0.1", + "dev": true + }, + "common-tags": { + "version": "1.8.2", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "concordance": { + "version": "5.0.4", + "dev": true, + "requires": { + "date-time": "^3.1.0", + "esutils": "^2.0.3", + "fast-diff": "^1.2.0", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.15", + "md5-hex": "^3.0.1", + "semver": "^7.3.2", + "well-known-symbols": "^2.0.0" + } + }, + "console-browserify": { + "version": "1.2.0", + "dev": true + }, + "console.table": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/console.table/-/console.table-0.10.0.tgz", + "integrity": "sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==", + "dev": true, + "requires": { + "easy-table": "1.1.0" + } + }, + "constants-browserify": { + "version": "1.0.0", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "dev": true + }, + "core-js-compat": { + "version": "3.31.0", + "dev": true, + "requires": { + "browserslist": "^4.21.5" + } + }, + "core-util-is": { + "version": "1.0.3", + "dev": true + }, + "create-ecdh": { + "version": "4.0.4", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css.escape": { + "version": "1.5.1", + "dev": true + }, + "cssstyle": { + "version": "3.0.0", + "dev": true, + "requires": { + "rrweb-cssom": "^0.6.0" + } + }, + "csstype": { + "version": "3.1.2", + "dev": true + }, + "cypress": { + "version": "12.15.0", + "dev": true, + "requires": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.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.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "@types/node": { + "version": "14.18.51", + "dev": true + }, + "buffer": { + "version": "5.7.1", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "commander": { + "version": "6.2.1", + "dev": true + }, + "proxy-from-env": { + "version": "1.0.0", + "dev": true + } + } + }, + "dash-ast": { + "version": "1.0.0", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "4.0.0", + "dev": true, + "requires": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" + } + }, + "date-time": { + "version": "3.1.0", + "dev": true, + "requires": { + "time-zone": "^1.0.0" + } + }, + "dayjs": { + "version": "1.10.7", + "dev": true + }, + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "dev": true + }, + "decimal.js": { + "version": "10.4.3", + "dev": true + }, + "deep-eql": { + "version": "4.1.3", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-equal": { + "version": "2.2.1", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "dev": true + } + } + }, + "deep-is": { + "version": "0.1.4", + "dev": true + }, + "default-require-extensions": { + "version": "3.0.1", + "dev": true, + "requires": { + "strip-bom": "^4.0.0" + } + }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "optional": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.2.0", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "defined": { + "version": "1.0.1", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0" + }, + "deps-sort": { + "version": "2.0.1", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + } + }, + "dequal": { + "version": "2.0.3", + "dev": true + }, + "des.js": { + "version": "1.1.0", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "detective": { + "version": "5.2.1", + "dev": true, + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, + "diff": { + "version": "4.0.2", + "dev": true + }, + "diff-sequences": { + "version": "29.4.3", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-accessibility-api": { + "version": "0.5.16", + "dev": true + }, + "domain-browser": { + "version": "1.2.0", + "dev": true + }, + "domexception": { + "version": "4.0.0", + "dev": true, + "requires": { + "webidl-conversions": "^7.0.0" + } + }, + "duplexer": { + "version": "0.1.2", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "dev": true + }, + "easy-table": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz", + "integrity": "sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==", + "dev": true, + "requires": { + "wcwidth": ">=1.0.1" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.4.440", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.15.0", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "enquirer": { + "version": "2.3.6", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "4.5.0", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.1.4", + "dev": true, + "requires": { + "stackframe": "^1.3.4" + } + }, + "es-get-iterator": { + "version": "1.1.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "dev": true + } + } + }, + "es-module-lexer": { + "version": "1.3.0", + "dev": true, + "peer": true + }, + "es6-error": { + "version": "4.1.1", + "dev": true + }, + "esbuild": { + "version": "0.18.8", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.8", + "@esbuild/android-arm64": "0.18.8", + "@esbuild/android-x64": "0.18.8", + "@esbuild/darwin-arm64": "0.18.8", + "@esbuild/darwin-x64": "0.18.8", + "@esbuild/freebsd-arm64": "0.18.8", + "@esbuild/freebsd-x64": "0.18.8", + "@esbuild/linux-arm": "0.18.8", + "@esbuild/linux-arm64": "0.18.8", + "@esbuild/linux-ia32": "0.18.8", + "@esbuild/linux-loong64": "0.18.8", + "@esbuild/linux-mips64el": "0.18.8", + "@esbuild/linux-ppc64": "0.18.8", + "@esbuild/linux-riscv64": "0.18.8", + "@esbuild/linux-s390x": "0.18.8", + "@esbuild/linux-x64": "0.18.8", + "@esbuild/netbsd-x64": "0.18.8", + "@esbuild/openbsd-x64": "0.18.8", + "@esbuild/sunos-x64": "0.18.8", + "@esbuild/win32-arm64": "0.18.8", + "@esbuild/win32-ia32": "0.18.8", + "@esbuild/win32-x64": "0.18.8" + } + }, + "esbuild-darwin-arm64": { + "version": "0.14.54", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "eslint": { + "version": "8.43.0", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "dev": true + }, + "eslint-scope": { + "version": "7.2.0", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.20.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "dev": true + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "dev": true, + "requires": {} + }, + "eslint-plugin-react-refresh": { + "version": "0.3.5", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "dev": true + }, + "espree": { + "version": "9.5.2", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esprima": { + "version": "4.0.1", + "dev": true + }, + "esquery": { + "version": "1.5.0", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "event-stream": { + "version": "3.3.4", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "eventemitter2": { + "version": "6.4.7", + "dev": true + }, + "events": { + "version": "2.1.0", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "4.1.0", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "executable": { + "version": "4.1.1", + "dev": true, + "requires": { + "pify": "^2.2.0" + } + }, + "expect": { + "version": "29.5.0", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" + } + }, + "extend": { + "version": "3.0.2", + "dev": true + }, + "extract-zip": { + "version": "2.0.1", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-diff": { + "version": "1.3.0", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.1.1", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fd-slicer": { + "version": "1.1.0", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "3.2.0", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "dev": true + }, + "follow-redirects": { + "version": "1.15.2" + }, + "for-each": { + "version": "0.3.3", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "foreground-child": { + "version": "2.0.0", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "dev": true + }, + "form-data": { + "version": "4.0.0", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "from": { + "version": "0.1.7", + "dev": true + }, + "fromentries": { + "version": "1.3.2", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.1", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "dev": true + }, + "get-stream": { + "version": "5.2.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "getos": { + "version": "3.2.1", + "dev": true, + "requires": { + "async": "^3.2.0" + } + }, + "getpass": { + "version": "0.1.7", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.3", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "peer": true + }, + "global-dirs": { + "version": "3.0.1", + "dev": true, + "requires": { + "ini": "2.0.0" + } + }, + "globals": { + "version": "11.12.0", + "dev": true + }, + "globby": { + "version": "11.0.4", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.11", + "dev": true + }, + "grapheme-splitter": { + "version": "1.0.4", + "dev": true + }, + "graphemer": { + "version": "1.4.0", + "dev": true + }, + "has": { + "version": "1.0.3", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "4.0.1", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "has-bigints": { + "version": "1.0.2", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash-base": { + "version": "3.1.0", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hash.js": { + "version": "1.1.7", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasha": { + "version": "5.2.2", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "dev": true + } + } + }, + "he": { + "version": "1.2.0", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "html-encoding-sniffer": { + "version": "3.0.0", + "dev": true, + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, + "html-escaper": { + "version": "2.0.2", + "dev": true + }, + "htmlescape": { + "version": "1.1.1", + "dev": true + }, + "http-proxy-agent": { + "version": "5.0.0", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "http-signature": { + "version": "1.3.6", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "dev": true + }, + "https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "1.1.1", + "dev": true + }, + "husky": { + "version": "8.0.3", + "dev": true + }, + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "dev": true + }, + "ignore": { + "version": "5.2.4", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "dev": true + }, + "ini": { + "version": "2.0.0", + "dev": true + }, + "inline-source-map": { + "version": "0.6.2", + "dev": true, + "requires": { + "source-map": "~0.5.3" + } + }, + "insert-module-globals": { + "version": "7.2.1", + "dev": true, + "requires": { + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + } + }, + "internal-slot": { + "version": "1.0.5", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-arguments": { + "version": "1.1.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-array-buffer": { + "version": "3.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, + "is-arrayish": { + "version": "0.2.1", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true + }, + "is-callable": { + "version": "1.2.7", + "dev": true + }, + "is-ci": { + "version": "3.0.1", + "dev": true, + "requires": { + "ci-info": "^3.2.0" + } + }, + "is-core-module": { + "version": "2.12.1", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.4.0", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-map": { + "version": "2.0.2", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-path-inside": { + "version": "3.0.3", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-set": { + "version": "2.0.2", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.10", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "dev": true + }, + "is-weakmap": { + "version": "2.0.1", + "dev": true + }, + "is-weakset": { + "version": "2.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "is-windows": { + "version": "1.0.2", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "dev": true + }, + "istanbul-lib-hook": { + "version": "3.0.0", + "dev": true, + "requires": { + "append-transform": "^2.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "istanbul-lib-processinfo": { + "version": "2.0.3", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + }, + "p-map": { + "version": "3.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jackspeak": { + "version": "2.2.1", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jest-diff": { + "version": "29.5.0", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "dev": true + }, + "pretty-format": { + "version": "29.5.0", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "dev": true + } + } + }, + "jest-get-type": { + "version": "29.4.3", + "dev": true + }, + "jest-matcher-utils": { + "version": "29.5.0", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "dev": true + }, + "pretty-format": { + "version": "29.5.0", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "dev": true + } + } + }, + "jest-message-util": { + "version": "29.5.0", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "dev": true + }, + "pretty-format": { + "version": "29.5.0", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "dev": true + } + } + }, + "jest-util": { + "version": "29.5.0", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "27.5.1", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "joi": { + "version": "17.9.2", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "js-string-escape": { + "version": "1.0.1", + "dev": true + }, + "js-tokens": { + "version": "4.0.0" + }, + "js-yaml": { + "version": "4.1.0", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "dev": true + }, + "jsdom": { + "version": "22.1.0", + "dev": true, + "requires": { + "abab": "^2.0.6", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", + "domexception": "^4.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "punycode": { + "version": "2.3.0", + "dev": true + }, + "tough-cookie": { + "version": "4.1.3", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + } + }, + "universalify": { + "version": "0.2.0", + "dev": true + } + } + }, + "jsesc": { + "version": "2.5.2", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "json-stable-stringify": { + "version": "0.0.1", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "dev": true + }, + "json5": { + "version": "2.2.3", + "dev": true + }, + "jsonc-parser": { + "version": "3.2.0", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonify": { + "version": "0.0.1", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "jsprim": { + "version": "2.0.2", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "dev": true + }, + "verror": { + "version": "1.10.0", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + } + } + }, + "knuth-shuffle-seeded": { + "version": "1.0.6", + "dev": true, + "requires": { + "seed-random": "~2.2.0" + } + }, + "labeled-stream-splicer": { + "version": "2.0.2", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, + "lazy-ass": { + "version": "1.6.0", + "dev": true + }, + "levn": { + "version": "0.4.1", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "dev": true + }, + "listr2": { + "version": "3.14.0", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + } + }, + "loader-runner": { + "version": "4.3.0", + "dev": true, + "peer": true + }, + "local-pkg": { + "version": "0.4.3", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "dev": true + }, + "lodash-es": { + "version": "4.17.21", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "dev": true + }, + "lodash.memoize": { + "version": "3.0.4", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.2", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "log-update": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "loose-envify": { + "version": "1.4.0", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loupe": { + "version": "2.3.6", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "5.1.1", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "luxon": { + "version": "3.2.1", + "dev": true + }, + "lz-string": { + "version": "1.5.0", + "dev": true + }, + "magic-string": { + "version": "0.30.0", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "map-stream": { + "version": "0.1.0", + "dev": true + }, + "md5-hex": { + "version": "3.0.1", + "dev": true, + "requires": { + "blueimp-md5": "^2.10.0" + } + }, + "md5.js": { + "version": "1.3.5", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "merge-stream": { + "version": "2.0.0", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true + } + } + }, + "mime-db": { + "version": "1.52.0" + }, + "mime-types": { + "version": "2.1.35", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "dev": true + }, + "min-indent": { + "version": "1.0.1", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "dev": true + }, + "minipass": { + "version": "6.0.2", + "dev": true + }, + "mkdirp": { + "version": "2.1.6", + "dev": true + }, + "mkdirp-classic": { + "version": "0.5.3", + "dev": true + }, + "mlly": { + "version": "1.4.0", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "ufo": "^1.1.2" + } + }, + "mocha": { + "version": "10.2.0", + "dev": true, + "requires": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "diff": { + "version": "5.0.0", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "dev": true + }, + "glob": { + "version": "7.2.0", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "minimatch": { + "version": "5.0.1", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + } + } + }, + "ms": { + "version": "2.1.3", + "dev": true + }, + "nanoid": { + "version": "3.3.3", + "dev": true + }, + "serialize-javascript": { + "version": "6.0.0", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "yargs-parser": { + "version": "20.2.4", + "dev": true + } + } + }, + "module-deps": { + "version": "6.2.3", + "dev": true, + "requires": { + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "JSONStream": "^1.0.3", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + }, + "mz": { + "version": "2.7.0", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nanoclone": { + "version": "0.2.1", + "dev": true + }, + "nanoid": { + "version": "3.3.6", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "dev": true, + "peer": true + }, + "no-case": { + "version": "3.0.4", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-hook": { + "version": "1.0.0", + "dev": true + }, + "node-preload": { + "version": "0.2.1", + "dev": true, + "requires": { + "process-on-spawn": "^1.0.0" + } + }, + "node-releases": { + "version": "2.0.12", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nwsapi": { + "version": "2.2.5", + "dev": true + }, + "nyc": { + "version": "15.1.0", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "dependencies": { + "cliui": { + "version": "6.0.0", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "3.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "object-assign": { + "version": "4.1.1", + "dev": true + }, + "object-inspect": { + "version": "1.12.3", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "once": { + "version": "1.4.0", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "dev": true + }, + "ospath": { + "version": "1.2.2", + "dev": true + }, + "outpipe": { + "version": "1.1.1", + "dev": true, + "requires": { + "shell-quote": "^1.4.2" + } + }, + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-map": { + "version": "4.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "package-hash": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, + "pad-right": { + "version": "0.2.2", + "dev": true, + "requires": { + "repeat-string": "^1.5.2" + } + }, + "pako": { + "version": "1.0.11", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parents": { + "version": "1.0.1", + "dev": true, + "requires": { + "path-platform": "~0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.6", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse5": { + "version": "7.1.2", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + }, + "path-browserify": { + "version": "0.0.1", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "path-platform": { + "version": "0.11.15", + "dev": true + }, + "path-scurry": { + "version": "1.9.2", + "dev": true, + "requires": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "9.1.2", + "dev": true + } + } + }, + "path-type": { + "version": "4.0.0", + "dev": true + }, + "pathe": { + "version": "1.1.1", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "dev": true + }, + "pause-stream": { + "version": "0.0.11", + "dev": true, + "requires": { + "through": "~2.3" + } + }, + "pbkdf2": { + "version": "3.1.2", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pend": { + "version": "1.2.0", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "dev": true + }, + "pify": { + "version": "2.3.0", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "pkg-types": { + "version": "1.0.3", + "dev": true, + "requires": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "postcss": { + "version": "8.4.24", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "prelude-ls": { + "version": "1.2.1", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "dev": true + }, + "pretty-format": { + "version": "27.5.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "ansi-styles": { + "version": "5.2.0", + "dev": true + } + } + }, + "process": { + "version": "0.11.10", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "dev": true + }, + "process-on-spawn": { + "version": "1.0.0", + "dev": true, + "requires": { + "fromentries": "^1.2.0" + } + }, + "progress": { + "version": "2.0.3", + "dev": true + }, + "property-expr": { + "version": "2.0.5", + "dev": true + }, + "proxy-from-env": { + "version": "1.1.0" + }, + "ps-tree": { + "version": "1.2.0", + "dev": true, + "requires": { + "event-stream": "=3.3.4" + } + }, + "psl": { + "version": "1.9.0", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "1.4.1", + "dev": true + }, + "qs": { + "version": "6.10.4", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystring-es3": { + "version": "0.2.1", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "react": { + "version": "18.2.0", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "react-hook-form": { + "version": "7.45.0", + "requires": {} + }, + "react-is": { + "version": "17.0.2", + "dev": true + }, + "react-refresh": { + "version": "0.14.0", + "dev": true + }, + "react-router": { + "version": "6.14.0", + "requires": { + "@remix-run/router": "1.7.0" + } + }, + "react-router-dom": { + "version": "6.14.0", + "requires": { + "@remix-run/router": "1.7.0", + "react-router": "6.14.0" + } + }, + "read-only-stream": { + "version": "2.0.0", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "readable-stream": { + "version": "2.3.8", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "readdirp": { + "version": "3.6.0", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "3.0.0", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "dev": true + }, + "regenerate": { + "version": "1.4.2", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.0", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.1", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexp-match-indices": { + "version": "1.0.2", + "dev": true, + "requires": { + "regexp-tree": "^0.1.11" + } + }, + "regexp-tree": { + "version": "0.1.27", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.5.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + } + }, + "regexpu-core": { + "version": "5.3.2", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "dev": true + } + } + }, + "release-zalgo": { + "version": "1.0.0", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, + "repeat-string": { + "version": "1.6.1", + "dev": true + }, + "request-progress": { + "version": "3.0.0", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "dev": true, + "peer": true + }, + "require-main-filename": { + "version": "2.0.0", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "dev": true + }, + "resolve": { + "version": "1.22.2", + "dev": true, + "requires": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "dev": true + }, + "resolve-pkg": { + "version": "2.0.0", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "dev": true + } + } + }, + "restore-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "reusify": { + "version": "1.0.4", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rollup": { + "version": "3.25.2", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rrweb-cssom": { + "version": "0.6.0", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.8.1", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "dev": true + }, + "saxes": { + "version": "6.0.0", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "scheduler": { + "version": "0.23.0", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "schema-utils": { + "version": "4.2.0", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "peer": true + } + } + }, + "seed-random": { + "version": "2.2.0", + "dev": true + }, + "seedrandom": { + "version": "3.0.5", + "dev": true + }, + "semver": { + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.1", + "dev": true, + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shasum": { + "version": "1.0.2", + "dev": true, + "requires": { + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" + } + }, + "shasum-object": { + "version": "1.0.0", + "dev": true, + "requires": { + "fast-safe-stringify": "^2.0.7" + } + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "shell-quote": { + "version": "1.8.1", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "siginfo": { + "version": "2.0.0", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "dev": true + }, + "simple-concat": { + "version": "1.0.1", + "dev": true + }, + "slash": { + "version": "3.0.0", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "sort-array": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/sort-array/-/sort-array-4.1.5.tgz", + "integrity": "sha512-Ya4peoS1fgFN42RN1REk2FgdNOeLIEMKFGJvs7VTP3OklF8+kl2SkpVliZ4tk/PurWsrWRsdNdU+tgyOBkB9sA==", + "dev": true, + "requires": { + "array-back": "^5.0.0", + "typical": "^6.0.1" + } + }, + "source-map": { + "version": "0.5.7", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "spawn-wrap": { + "version": "2.0.0", + "dev": true, + "requires": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + } + }, + "split": { + "version": "0.3.3", + "dev": true, + "requires": { + "through": "2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "sshpk": { + "version": "1.17.0", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-utils": { + "version": "2.0.6", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "dev": true + } + } + }, + "stackback": { + "version": "0.0.2", + "dev": true + }, + "stackframe": { + "version": "1.3.4", + "dev": true + }, + "start-server-and-test": { + "version": "2.0.0", + "dev": true, + "requires": { + "arg": "^5.0.2", + "bluebird": "3.7.2", + "check-more-types": "2.24.0", + "debug": "4.3.4", + "execa": "5.1.1", + "lazy-ass": "1.6.0", + "ps-tree": "1.2.0", + "wait-on": "7.0.1" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "dev": true + } + } + }, + "std-env": { + "version": "3.3.3", + "dev": true + }, + "stop-iteration-iterator": { + "version": "1.0.0", + "dev": true, + "requires": { + "internal-slot": "^1.0.4" + } + }, + "stream-browserify": { + "version": "2.0.2", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-combiner": { + "version": "0.0.4", + "dev": true, + "requires": { + "duplexer": "~0.1.1" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "dev": true, + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "stream-http": { + "version": "3.2.0", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stream-splicer": { + "version": "2.0.1", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "string_decoder": { + "version": "1.3.0", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-argv": { + "version": "0.3.2", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "dev": true + } + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "dev": true + } + } + }, + "strip-bom": { + "version": "4.0.0", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true + }, + "strip-literal": { + "version": "1.0.1", + "dev": true, + "requires": { + "acorn": "^8.8.2" + } + }, + "subarg": { + "version": "1.0.0", + "dev": true, + "requires": { + "minimist": "^1.1.0" + } + }, + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true + }, + "symbol-tree": { + "version": "3.2.4", + "dev": true + }, + "syntax-error": { + "version": "1.4.0", + "dev": true, + "requires": { + "acorn-node": "^1.2.0" + } + }, + "tapable": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "terser": { + "version": "5.18.1", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "dev": true, + "peer": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.9", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "throttleit": { + "version": "1.0.0", + "dev": true + }, + "through": { + "version": "2.3.8", + "dev": true + }, + "through2": { + "version": "2.0.5", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "time-zone": { + "version": "1.0.0", + "dev": true + }, + "timers-browserify": { + "version": "1.4.2", + "dev": true, + "requires": { + "process": "~0.11.0" + } + }, + "tinybench": { + "version": "2.5.0", + "dev": true + }, + "tinypool": { + "version": "0.5.0", + "dev": true + }, + "tinyspy": { + "version": "2.1.1", + "dev": true + }, + "tmp": { + "version": "0.2.1", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toposort": { + "version": "2.0.2", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.3.0", + "dev": true + } + } + }, + "tr46": { + "version": "4.1.1", + "dev": true, + "requires": { + "punycode": "^2.3.0" + }, + "dependencies": { + "punycode": { + "version": "2.3.0", + "dev": true + } + } + }, + "ts-dedent": { + "version": "2.2.0", + "dev": true + }, + "tslib": { + "version": "2.5.3", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "dev": true + } + } + }, + "tty-browserify": { + "version": "0.0.1", + "dev": true + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "5.1.3", + "dev": true + }, + "typical": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-6.0.1.tgz", + "integrity": "sha512-+g3NEp7fJLe9DPa1TArHm9QAA7YciZmWnfAqEaFrBihQ7epOv9i99rjtgb6Iz0wh3WuQDjsCTDfgRoGnmHN81A==", + "dev": true + }, + "ufo": { + "version": "1.1.2", + "dev": true + }, + "umd": { + "version": "3.0.3", + "dev": true + }, + "undeclared-identifiers": { + "version": "1.1.3", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "dev": true + }, + "untildify": { + "version": "4.0.0", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.11", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "upper-case-first": { + "version": "2.0.2", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "uri-js": { + "version": "4.4.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.3.0", + "dev": true + } + } + }, + "url": { + "version": "0.11.1", + "dev": true, + "requires": { + "punycode": "^1.4.1", + "qs": "^6.11.0" + }, + "dependencies": { + "qs": { + "version": "6.11.2", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "url-parse": { + "version": "1.5.10", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "util": { + "version": "0.10.4", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "dev": true + } + } + }, + "util-arity": { + "version": "1.1.0", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "dev": true + }, + "uuid": { + "version": "9.0.0", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.1.0", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } + }, + "verror": { + "version": "1.10.1", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "dev": true + } + } + }, + "vite": { + "version": "4.3.9", + "dev": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "dependencies": { + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "dev": true, + "optional": true + }, + "esbuild": { + "version": "0.17.19", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + } + } + }, + "vite-node": { + "version": "0.31.4", + "dev": true, + "requires": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.2.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0" + } + }, + "vite-plugin-istanbul": { + "version": "4.1.0", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "^1.1.0", + "istanbul-lib-instrument": "^5.1.0", + "picocolors": "^1.0.0", + "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "vitest": { + "version": "0.31.4", + "dev": true, + "requires": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.31.4", + "@vitest/runner": "0.31.4", + "@vitest/snapshot": "0.31.4", + "@vitest/spy": "0.31.4", + "@vitest/utils": "0.31.4", + "acorn": "^8.8.2", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.7", + "concordance": "^5.0.4", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "std-env": "^3.3.2", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.5.0", + "vite": "^3.0.0 || ^4.0.0", + "vite-node": "0.31.4", + "why-is-node-running": "^2.2.2" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "dev": true + } + } + }, + "vm-browserify": { + "version": "1.1.2", + "dev": true + }, + "w3c-xmlserializer": { + "version": "4.0.0", + "dev": true, + "requires": { + "xml-name-validator": "^4.0.0" + } + }, + "wait-on": { + "version": "7.0.1", + "dev": true, + "requires": { + "axios": "^0.27.2", + "joi": "^17.7.0", + "lodash": "^4.17.21", + "minimist": "^1.2.7", + "rxjs": "^7.8.0" + }, + "dependencies": { + "axios": { + "version": "0.27.2", + "dev": true, + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + } + } + }, + "watchify": { + "version": "4.0.0", + "dev": true, + "requires": { + "anymatch": "^3.1.0", + "browserify": "^17.0.0", + "chokidar": "^3.4.0", + "defined": "^1.0.0", + "outpipe": "^1.1.0", + "through2": "^4.0.2", + "xtend": "^4.0.2" + }, + "dependencies": { + "browserify": { + "version": "17.0.0", + "dev": true, + "requires": { + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^2.0.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.1", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^3.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.2.1", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.2.3", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "^1.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum-object": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^3.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.12.0", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "through2": { + "version": "2.0.5", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "events": { + "version": "3.3.0", + "dev": true + }, + "path-browserify": { + "version": "1.0.1", + "dev": true + }, + "stream-browserify": { + "version": "3.0.0", + "dev": true, + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "through2": { + "version": "4.0.2", + "dev": true, + "requires": { + "readable-stream": "3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "util": { + "version": "0.12.5", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + } + } + }, + "watchpack": { + "version": "2.4.0", + "dev": true, + "peer": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "optional": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "dev": true + }, + "webpack": { + "version": "5.88.0", + "dev": true, + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "events": { + "version": "3.3.0", + "dev": true, + "peer": true + }, + "schema-utils": { + "version": "3.3.0", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-sources": { + "version": "3.2.3", + "dev": true, + "peer": true + }, + "well-known-symbols": { + "version": "2.0.0", + "dev": true + }, + "whatwg-encoding": { + "version": "2.0.0", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + } + }, + "whatwg-mimetype": { + "version": "3.0.0", + "dev": true + }, + "whatwg-url": { + "version": "12.0.1", + "dev": true, + "requires": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + } + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-collection": { + "version": "1.0.1", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-module": { + "version": "2.0.1", + "dev": true + }, + "which-typed-array": { + "version": "1.1.9", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, + "why-is-node-running": { + "version": "2.2.2", + "dev": true, + "requires": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + } + }, + "word-wrap": { + "version": "1.2.3", + "dev": true + }, + "workerpool": { + "version": "6.2.1", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "8.13.0", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "4.0.0", + "dev": true + }, + "xmlbuilder": { + "version": "15.1.1", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "dev": true + }, + "yaml": { + "version": "2.3.1", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "dev": true + }, + "decamelize": { + "version": "4.0.0", + "dev": true + } + } + }, + "yauzl": { + "version": "2.10.0", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "dev": true + }, + "yup": { + "version": "0.32.11", + "dev": true, + "requires": { + "@babel/runtime": "^7.15.4", + "@types/lodash": "^4.14.175", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "nanoclone": "^0.2.1", + "property-expr": "^2.0.4", + "toposort": "^2.0.2" + } + }, + "zod": { + "version": "3.21.4" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..4be92cc397 --- /dev/null +++ b/package.json @@ -0,0 +1,61 @@ +{ + "name": "frontend-react-ess", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "testing": "vite --mode testing", + "build": "tsc && vite build", + "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0 --fix", + "preview": "vite preview", + "test": "vitest run --mode testing", + "test:coverage": "npm test -- --coverage", + "test:show-coverage": "open ./coverage/index.html", + "cy:open-e2e": "cypress open open --e2e --browser electron", + "cy:run-e2e": "cypress run --e2e", + "cy:e2e-interactive": "start-server-and-test testing http-get://localhost:3000 cy:open-e2e", + "cy:e2e-headless": "start-server-and-test testing http-get://localhost:3000 cy:run-e2e", + "cy:show-coverage": "open ./cypress-coverage/lcov-report/index.html", + "prepare": "husky install" + }, + "dependencies": { + "@hookform/resolvers": "^3.1.0", + "axios": "^1.4.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-hook-form": "^7.44.1", + "react-router-dom": "^6.11.2", + "zod": "^3.21.4" + }, + "devDependencies": { + "@badeball/cypress-cucumber-preprocessor": "^18.0.1", + "@bahmutov/cypress-esbuild-preprocessor": "^2.2.0", + "@cucumber/cucumber": "^9.2.0", + "@cypress/code-coverage": "^3.10.7", + "@istanbuljs/nyc-config-typescript": "^1.0.2", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^14.0.0", + "@types/jest": "^29.5.1", + "@types/node": "^20.2.5", + "@types/react": "^18.0.28", + "@types/react-dom": "^18.0.11", + "@types/testing-library__jest-dom": "^5.14.6", + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "@vitejs/plugin-react": "^4.0.0", + "@vitest/coverage-c8": "^0.31.1", + "cypress": "^12.15.0", + "esbuild": "^0.18.8", + "eslint": "^8.38.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "husky": "^8.0.3", + "jsdom": "^22.1.0", + "start-server-and-test": "^2.0.0", + "typescript": "^5.0.2", + "vite": "^4.3.2", + "vite-plugin-istanbul": "^4.1.0", + "vitest": "^0.31.1" + } +} diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000000..e7b8dfb1b2 --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000000..0df674e24e --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,22 @@ +import { createBrowserRouter, RouterProvider } from "react-router-dom"; +import CreateTest from "./app/home/pages/CreateTest"; +import ListTests from "./app/home/pages/ListTests"; + +const router = createBrowserRouter([ + { + path: "*", + Component: CreateTest, + }, + { + path: "/create-test", + Component: CreateTest, + }, + { + path: "/tests", + Component: ListTests, + }, +]); + +export default function App() { + return Loading...

} />; +} diff --git a/src/Provider.tsx b/src/Provider.tsx new file mode 100644 index 0000000000..925941d38a --- /dev/null +++ b/src/Provider.tsx @@ -0,0 +1,8 @@ +import { ReactNode } from "react"; +import { HomeProvider } from "./app/home/context/HomeContext"; + +const Provider = ({ children }: { children: ReactNode }) => { + return {children}; +}; + +export default Provider; diff --git a/src/app/home/components/.gitkeep b/src/app/home/components/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/home/context/HomeContext/index.tsx b/src/app/home/context/HomeContext/index.tsx new file mode 100644 index 0000000000..2348edff45 --- /dev/null +++ b/src/app/home/context/HomeContext/index.tsx @@ -0,0 +1,54 @@ +import { createContext, ReactNode, useReducer, useMemo } from "react"; +import { HomeState } from "./types"; +import HomeService from "./service"; +import homeStateReducer from "./reducer"; +import { ApiService } from "../../../../shared/services/ApiService"; +import RequestStatus from "../../../../shared/types/request-status"; +import usePrevious from "../../../../shared/hooks/usePrevious"; + +interface HomeContextProps { + state: HomeState; + prevState?: HomeState; + service: HomeService; +} + +export const HomeContext = createContext( + {} as HomeContextProps +); + +interface HomeProviderProps { + children: ReactNode; +} + +export const HomeProvider = ({ children }: HomeProviderProps) => { + const [state, dispatch] = useReducer(homeStateReducer, { + createTestRequestStatus: RequestStatus.idle(), + getTestsRequestStatus: RequestStatus.idle(), + }); + + const prevState = usePrevious(state); + + const apiService = useMemo(() => { + return new ApiService({}); + }, []); + const service = useMemo( + () => + new HomeService({ + apiService, + dispatch, + }), + [apiService] + ); + + return ( + + {children} + + ); +}; diff --git a/src/app/home/context/HomeContext/reducer.ts b/src/app/home/context/HomeContext/reducer.ts new file mode 100644 index 0000000000..f8a0f6bd2b --- /dev/null +++ b/src/app/home/context/HomeContext/reducer.ts @@ -0,0 +1,21 @@ +import { HomeState, HomeStateAction } from "./types"; + +const homeStateReducer = (state: HomeState, action: HomeStateAction) => { + switch (action.type) { + case "CHANGE_CREATE_TEST_REQUEST_STATUS": + return { + ...state, + createTestRequestStatus: action.payload, + }; + case "CHANGE_GET_TESTS_REQUEST_STATUS": + return { + ...state, + getTestsRequestStatus: action.payload, + }; + + default: + return state; + } +}; + +export default homeStateReducer; diff --git a/src/app/home/context/HomeContext/service.ts b/src/app/home/context/HomeContext/service.ts new file mode 100644 index 0000000000..9ef25130ec --- /dev/null +++ b/src/app/home/context/HomeContext/service.ts @@ -0,0 +1,80 @@ +import { Dispatch } from "react"; +import { HomeStateAction } from "./types"; +import { ApiService } from "../../../../shared/services/ApiService"; +import RequestStatus from "../../../../shared/types/request-status"; +import { TestFormType } from "../../forms/TestForm"; +import TestModel from "../../models/TestModel"; +import { AppUnknownError } from "../../../../shared/errors/app-error"; + +export default class HomeService { + private apiService: ApiService; + private dispatch: Dispatch; + + constructor({ + apiService, + dispatch, + }: { + apiService: ApiService; + dispatch: Dispatch; + }) { + this.apiService = apiService; + this.dispatch = dispatch; + } + + async createTest(testForm: TestFormType): Promise { + this.dispatch({ + type: "CHANGE_CREATE_TEST_REQUEST_STATUS", + payload: RequestStatus.loading(), + }); + + const result = await this.apiService.post("/tests", testForm); + + result.handle({ + onSuccess: (response) => { + this.dispatch({ + type: "CHANGE_CREATE_TEST_REQUEST_STATUS", + payload: RequestStatus.success(response), + }); + }, + onFailure: (error) => { + this.dispatch({ + type: "CHANGE_CREATE_TEST_REQUEST_STATUS", + payload: RequestStatus.failure(error), + }); + }, + }); + } + + async getTests(): Promise { + try { + this.dispatch({ + type: "CHANGE_GET_TESTS_REQUEST_STATUS", + payload: RequestStatus.loading(), + }); + + const result = await this.apiService.get("/tests"); + + result.handle({ + onSuccess: (response) => { + const tests = response.data.map((test: any) => new TestModel(test)); + + this.dispatch({ + type: "CHANGE_GET_TESTS_REQUEST_STATUS", + payload: RequestStatus.success(tests), + }); + }, + onFailure: (error) => { + this.dispatch({ + type: "CHANGE_GET_TESTS_REQUEST_STATUS", + payload: RequestStatus.failure(error), + }); + }, + }); + } catch (_) { + this.dispatch({ + type: "CHANGE_GET_TESTS_REQUEST_STATUS", + payload: RequestStatus.failure(new AppUnknownError()), + }); + } + } +} diff --git a/src/app/home/context/HomeContext/types.ts b/src/app/home/context/HomeContext/types.ts new file mode 100644 index 0000000000..426cb8e2cb --- /dev/null +++ b/src/app/home/context/HomeContext/types.ts @@ -0,0 +1,17 @@ +import RequestStatus from "../../../../shared/types/request-status"; +import TestModel from "../../models/TestModel"; + +export type HomeStateAction = + | { + type: "CHANGE_CREATE_TEST_REQUEST_STATUS"; + payload: RequestStatus; + } + | { + type: "CHANGE_GET_TESTS_REQUEST_STATUS"; + payload: RequestStatus; + }; + +export interface HomeState { + createTestRequestStatus: RequestStatus; + getTestsRequestStatus: RequestStatus; +} diff --git a/src/app/home/forms/TestForm.ts b/src/app/home/forms/TestForm.ts new file mode 100644 index 0000000000..45bf50b2ef --- /dev/null +++ b/src/app/home/forms/TestForm.ts @@ -0,0 +1,9 @@ +import * as z from "zod"; + +export const TestFormSchema = z.object({ + name: z + .string() + .min(5, { message: "O campo nome deve ter no mínimo 5 caracteres" }), +}); + +export type TestFormType = z.infer; diff --git a/src/app/home/models/TestModel.ts b/src/app/home/models/TestModel.ts new file mode 100644 index 0000000000..1de64f9e75 --- /dev/null +++ b/src/app/home/models/TestModel.ts @@ -0,0 +1,9 @@ +export default class TestModel { + id: string; + name: string; + + constructor(data: TestModel) { + this.id = data.id; + this.name = data.name; + } +} diff --git a/src/app/home/pages/CreateTest/index.module.css b/src/app/home/pages/CreateTest/index.module.css new file mode 100644 index 0000000000..21e804134a --- /dev/null +++ b/src/app/home/pages/CreateTest/index.module.css @@ -0,0 +1,52 @@ +.container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; +} + +.title { + font-size: 3rem; + font-weight: bold; + margin-bottom: 1rem; +} + +.formContainer { + display: flex; + flex-direction: column; + justify-content: center; + width: 400px; + border: 1px solid #ccc; + border-radius: 5px; + padding: 2rem; + gap: 16px; +} + +.formInputContainer { + display: flex; + flex-direction: column; + gap: 8px; +} + +.formInput { + width: 100%; + padding: 0.5rem; + border: 1px solid #ccc; + border-radius: 5px; + font-size: 1rem; +} + +.formError { + color: red; + font-size: 0.8rem; +} + +.formButton { + width: 100%; + padding: 0.5rem; + border: 1px solid #ccc; + border-radius: 5px; + font-size: 1rem; + cursor: pointer; +} diff --git a/src/app/home/pages/CreateTest/index.tsx b/src/app/home/pages/CreateTest/index.tsx new file mode 100644 index 0000000000..2ea23248b9 --- /dev/null +++ b/src/app/home/pages/CreateTest/index.tsx @@ -0,0 +1,66 @@ +import { SubmitHandler, useForm } from "react-hook-form"; +import styles from "./index.module.css"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useContext, useEffect } from "react"; +import { HomeContext } from "../../context/HomeContext"; +import { TestFormSchema, TestFormType } from "../../forms/TestForm"; +import { Link } from "react-router-dom"; +import Button from "../../../../shared/components/Button"; + +const CreateTest = () => { + const { state, prevState, service } = useContext(HomeContext); + + const { + register, + handleSubmit, + reset, + formState: { errors }, + } = useForm({ + resolver: zodResolver(TestFormSchema), + }); + + const onSubmit: SubmitHandler = async (body) => { + service.createTest(body); + reset(); + }; + + useEffect(() => { + if ( + state.createTestRequestStatus !== prevState?.createTestRequestStatus && + state.createTestRequestStatus.isSuccess() + ) { + alert("Teste criado com sucesso!"); + } + }, [state, prevState]); + + return ( +
+

Crie um test

+
+
+ + {errors.name && ( + + {errors.name.message} + + )} +
+ + + + + VER TESTS + +
+
+ ); +}; + +export default CreateTest; diff --git a/src/app/home/pages/ListTests/index.module.css b/src/app/home/pages/ListTests/index.module.css new file mode 100644 index 0000000000..aa6fef7895 --- /dev/null +++ b/src/app/home/pages/ListTests/index.module.css @@ -0,0 +1,34 @@ +.container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; +} + +.title { + font-size: 3rem; + font-weight: bold; + margin-bottom: 1rem; +} + +.listContainer { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + gap: 16px; +} + +.listItem { + height: 100%; + width: 100%; + padding: 0.5rem; + border: 1px solid #ccc; + border-radius: 5px; +} + +.listItemText { + font-size: 1.5rem; +} diff --git a/src/app/home/pages/ListTests/index.tsx b/src/app/home/pages/ListTests/index.tsx new file mode 100644 index 0000000000..a54d5d2b81 --- /dev/null +++ b/src/app/home/pages/ListTests/index.tsx @@ -0,0 +1,45 @@ +import { useContext, useEffect } from "react"; +import styles from "./index.module.css"; +import { HomeContext } from "../../context/HomeContext"; +import { Link } from "react-router-dom"; + +const ListTests = () => { + const { service, state } = useContext(HomeContext); + + useEffect(() => { + service.getTests(); + }, [service]); + return ( +
+

List Tests

+
+ {state.getTestsRequestStatus.maybeMap({ + loading: () => Carregando..., + failed: () => Erro ao carregar tests!, + succeeded: (tests) => ( + <> + {tests.map((test) => { + return ( +
+ + {test.name} + +
+ ); + })} + + ), + })} +
+
+ + CRIAR TEST + +
+ ); +}; + +export default ListTests; diff --git a/src/global.css b/src/global.css new file mode 100644 index 0000000000..3c4cdef1ee --- /dev/null +++ b/src/global.css @@ -0,0 +1,11 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: sans-serif; +} + +html, +body { + height: 100%; +} diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000000..471f4acdd3 --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,13 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App"; +import "./global.css"; +import Provider from "./Provider"; + +ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( + + + + + +); diff --git a/src/shared/assets/react.svg b/src/shared/assets/react.svg new file mode 100644 index 0000000000..6c87de9bb3 --- /dev/null +++ b/src/shared/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/shared/components/Button/index.module.css b/src/shared/components/Button/index.module.css new file mode 100644 index 0000000000..73e412dbee --- /dev/null +++ b/src/shared/components/Button/index.module.css @@ -0,0 +1,8 @@ +.button { + width: 100%; + padding: 0.5rem; + border: 1px solid #ccc; + border-radius: 5px; + font-size: 1rem; + cursor: pointer; +} diff --git a/src/shared/components/Button/index.tsx b/src/shared/components/Button/index.tsx new file mode 100644 index 0000000000..b85b776800 --- /dev/null +++ b/src/shared/components/Button/index.tsx @@ -0,0 +1,14 @@ +import { ButtonHTMLAttributes } from "react"; +import styles from "./index.module.css"; + +type ButtonPros = ButtonHTMLAttributes; + +const Button = (props: ButtonPros) => { + return ( + + ); +}; + +export default Button; diff --git a/src/shared/enums/request-status.enum.ts b/src/shared/enums/request-status.enum.ts new file mode 100644 index 0000000000..a066a8af23 --- /dev/null +++ b/src/shared/enums/request-status.enum.ts @@ -0,0 +1,6 @@ +export enum RequestStatusEnum { + Idle, + Loading, + Succeeded, + Failed, +} diff --git a/src/shared/enums/result.enum.ts b/src/shared/enums/result.enum.ts new file mode 100644 index 0000000000..6d162afb11 --- /dev/null +++ b/src/shared/enums/result.enum.ts @@ -0,0 +1,4 @@ +export enum ResultEnum { + Success, + Failure, +} diff --git a/src/shared/errors/app-error.ts b/src/shared/errors/app-error.ts new file mode 100644 index 0000000000..e5547476a8 --- /dev/null +++ b/src/shared/errors/app-error.ts @@ -0,0 +1,46 @@ +export abstract class AppError { + public readonly slug: string; + public readonly message: string; + public readonly stackTrace: string; + + constructor(slug = "", message = "", stackTrace = "") { + this.slug = slug; + this.message = message; + this.stackTrace = stackTrace; + } + + toString = (): string => + `[${this.constructor.name}]: \nslug: ${this.slug}, \nmessage: ${this.message}, \nstackTrace: ${this.stackTrace}`; +} + +export class AppUnknownError extends AppError { + constructor( + slug = "app_unknown_error", + message = "Unknown error", + stackTrace = "" + ) { + super(slug, message, stackTrace); + } +} + +export class ParseError extends AppError { + constructor(slug = "parse_error", message = "Parse error", stackTrace = "") { + super(slug, message, stackTrace); + } + + toString = (): string => + `[${this.constructor.name}]: \nslug: ${this.slug}, \nmessage: ${this.message}, \nstackTrace: ${this.stackTrace}`; +} + +export class EntityNotFitError extends AppError { + constructor( + slug = "entity_error", + message = "Entity error", + stackTrace = "" + ) { + super(slug, message, stackTrace); + } + + toString = (): string => + `[${this.constructor.name}]: \nslug: ${this.slug}, \nmessage: ${this.message}, \nstackTrace: ${this.stackTrace}`; +} diff --git a/src/shared/errors/http-error.ts b/src/shared/errors/http-error.ts new file mode 100644 index 0000000000..8626ce0eb1 --- /dev/null +++ b/src/shared/errors/http-error.ts @@ -0,0 +1,150 @@ +import { AxiosError } from "axios"; + +import { AppError } from "./app-error"; +import BaseApiResponseModel from "../models/BaseApiResponseModel"; + +abstract class HttpError extends AppError { + public readonly statusCode: number; + + protected constructor( + slug: string, + message: string, + stackTrace: string, + statusCode = -1 + ) { + super(slug, message, stackTrace); + this.statusCode = statusCode; + } + + toString = (): string => + `[${this.constructor.name}]: \nslug: ${this.slug}, \nmessage: ${this.message}, \nstackTrace: ${this.stackTrace}, \nstatusCode: ${this.statusCode}`; + + static parseHttpError(error: AxiosError) { + let msg = "Ocorreu um erro inesperado. Tente novamente mais tarde."; + const slug = error.response?.statusText; + + if (error.response?.data) { + const baseApiResponseModel = new BaseApiResponseModel( + error.response?.data as any + ); + + msg = HttpError.mapMsgCodeToMessage(baseApiResponseModel.msgCode); + } + + switch (error.response?.status) { + case 400: + return new HttpBadRequestError({ + slug: slug, + message: msg, + }); + case 401: + return new HttpUnauthorizedError({ + slug: slug, + message: msg, + }); + case 403: + return new HttpForbiddenError({ + slug: slug, + message: msg, + }); + case 404: + return new HttpNotFoundError({ + slug: slug, + message: msg, + }); + case 410: + return new HttpGoneError({ + slug: slug, + message: msg, + }); + case 500: + return new HttpInternalServerError({ + slug: slug, + message: msg, + }); + default: + return new HttpUnknownError({ + slug: slug, + message: msg, + }); + } + } + + static mapMsgCodeToMessage(msgCode: string): string { + switch (msgCode) { + case "test_not_found": + return "Teste não encontrado."; + default: + return "Ocorreu um erro inesperado. Tente novamente mais tarde."; + } + } +} + +class HttpUnknownError extends HttpError { + constructor({ + slug = "unknown", + message = "Unknown error", + stackTrace = "", + }) { + super(slug, message, stackTrace); + } +} + +class HttpBadRequestError extends HttpError { + constructor({ + slug = "bad_request", + message = "Bad request", + stackTrace = "", + }) { + super(slug, message, stackTrace, 400); + } +} + +class HttpUnauthorizedError extends HttpError { + constructor({ + slug = "unauthorized", + message = "Unauthorized", + stackTrace = "", + }) { + super(slug, message, stackTrace, 401); + } +} + +class HttpForbiddenError extends HttpError { + constructor({ slug = "forbidden", message = "Forbidden", stackTrace = "" }) { + super(slug, message, stackTrace, 403); + } +} + +class HttpNotFoundError extends HttpError { + constructor({ slug = "not_found", message = "Not found", stackTrace = "" }) { + super(slug, message, stackTrace, 404); + } +} + +class HttpGoneError extends HttpError { + constructor({ slug = "gone", message = "Gone", stackTrace = "" }) { + super(slug, message, stackTrace, 410); + } +} + +class HttpInternalServerError extends HttpError { + constructor({ + slug = "internal_server_error", + message = "Internal server error", + stackTrace = "", + }) { + super(slug, message, stackTrace, 500); + } +} + +export { + HttpError, + HttpUnknownError, + HttpBadRequestError, + HttpUnauthorizedError, + HttpForbiddenError, + HttpNotFoundError, + HttpGoneError, + HttpInternalServerError, +}; diff --git a/src/shared/hooks/usePrevious.tsx b/src/shared/hooks/usePrevious.tsx new file mode 100644 index 0000000000..6b1cc84e6f --- /dev/null +++ b/src/shared/hooks/usePrevious.tsx @@ -0,0 +1,13 @@ +import { useRef, useEffect } from "react"; + +const usePrevious = (value: T): T | undefined => { + const ref = useRef(); + + useEffect(() => { + ref.current = value; + }, [value]); + + return ref.current; +}; + +export default usePrevious; diff --git a/src/shared/models/BaseApiResponseModel.ts b/src/shared/models/BaseApiResponseModel.ts new file mode 100644 index 0000000000..559f821363 --- /dev/null +++ b/src/shared/models/BaseApiResponseModel.ts @@ -0,0 +1,15 @@ +export default class BaseApiResponseModel { + msg: string; + msgCode: string; + + code: number; + + data?: any; + + constructor(data: BaseApiResponseModel) { + this.msg = data.msg; + this.msgCode = data.msgCode; + this.code = data.code; + this.data = data.data; + } +} diff --git a/src/shared/services/ApiService.ts b/src/shared/services/ApiService.ts new file mode 100644 index 0000000000..3e94dded65 --- /dev/null +++ b/src/shared/services/ApiService.ts @@ -0,0 +1,118 @@ +import axios, { AxiosError, AxiosInstance } from "axios"; +import { FailureResult, Result, SuccessResult } from "../types/result"; +import { AppUnknownError } from "../errors/app-error"; +import { HttpError, HttpUnauthorizedError } from "../errors/http-error"; +import BaseApiResponseModel from "../models/BaseApiResponseModel"; + +export class ApiService { + private httpClient: AxiosInstance; + + constructor({ + httpClient = axios.create({ + baseURL: import.meta.env.VITE_API_URL, + }), + }: { + httpClient?: AxiosInstance; + }) { + this.httpClient = httpClient; + } + + get headers() { + // TODO: add token to headers + return { + Authorization: `Bearer ${localStorage.getItem("token")}`, + }; + } + + handleHttpError(error: Error | AxiosError) { + if (axios.isAxiosError(error)) { + const httpError: HttpError = HttpError.parseHttpError(error); + + if (httpError instanceof HttpUnauthorizedError) { + // TODO: handle unauthorized error + } + + return new FailureResult(httpError); + } + + return new FailureResult(new AppUnknownError()); + } + + public async get( + path: string, + queryParams?: any + ): Promise> { + try { + const response = await this.httpClient.get(path, { + headers: this.headers, + params: queryParams, + }); + + const baseApiResponseModel = new BaseApiResponseModel(response.data); + + return new SuccessResult(baseApiResponseModel); + } catch (e) { + const error = e as Error | AxiosError; + + return this.handleHttpError(error); + } + } + + public async post( + path: string, + body: any + ): Promise> { + try { + const response = await this.httpClient.post(path, body, { + headers: this.headers, + }); + + const baseApiResponseModel = new BaseApiResponseModel(response.data); + + return new SuccessResult(baseApiResponseModel); + } catch (e) { + const error = e as Error | AxiosError; + + return this.handleHttpError(error); + } + } + + public async update( + path: string, + body: any + ): Promise> { + try { + const response = await this.httpClient.put(path, body, { + headers: this.headers, + }); + + const baseApiResponseModel = new BaseApiResponseModel(response.data); + + return new SuccessResult(baseApiResponseModel); + } catch (e) { + const error = e as Error | AxiosError; + + return this.handleHttpError(error); + } + } + + public async delete( + path: string, + queryParams?: any + ): Promise> { + try { + const response = await this.httpClient.delete(path, { + headers: this.headers, + params: queryParams, + }); + + const baseApiResponseModel = new BaseApiResponseModel(response.data); + + return new SuccessResult(baseApiResponseModel); + } catch (e) { + const error = e as Error | AxiosError; + + return this.handleHttpError(error); + } + } +} diff --git a/src/shared/types/request-status.ts b/src/shared/types/request-status.ts new file mode 100644 index 0000000000..451bf711a9 --- /dev/null +++ b/src/shared/types/request-status.ts @@ -0,0 +1,107 @@ +import { RequestStatusEnum } from "../enums/request-status.enum"; +import { AppError } from "../errors/app-error"; + +export default class RequestStatus { + status: RequestStatusEnum; + + constructor(status: RequestStatusEnum = RequestStatusEnum.Idle) { + this.status = status; + } + + isIdle(): boolean { + return this.status === RequestStatusEnum.Idle; + } + + isLoading(): boolean { + return this.status === RequestStatusEnum.Loading; + } + + isSuccess(): boolean { + return this.status === RequestStatusEnum.Succeeded; + } + + isFailure(): boolean { + return this.status === RequestStatusEnum.Failed; + } + + static idle(): RequestStatusIdle { + return new RequestStatusIdle(); + } + + static loading(): RequestStatusLoading { + return new RequestStatusLoading(); + } + + static success(data: T): RequestStatusSuccess { + return new RequestStatusSuccess(data); + } + + static failure(error: E): RequestStatusFailure { + return new RequestStatusFailure(error); + } + + maybeMap({ + idle, + loading, + succeeded, + failed, + orElse, + }: { + idle?: () => K; + loading?: () => K; + succeeded?: (data: T) => K; + failed?: (error: E) => K; + orElse?: () => K; + }): K { + switch (this.status) { + case RequestStatusEnum.Idle: + return idle ? idle() : (undefined as unknown as K); + case RequestStatusEnum.Loading: + return loading ? loading() : (undefined as unknown as K); + case RequestStatusEnum.Succeeded: + if (this instanceof RequestStatusSuccess) { + return succeeded ? succeeded(this.data) : (undefined as unknown as K); + } else { + return undefined as unknown as K; + } + case RequestStatusEnum.Failed: + if (this instanceof RequestStatusFailure) { + return failed ? failed(this.error) : (undefined as unknown as K); + } else { + return undefined as unknown as K; + } + default: + return orElse ? orElse() : (undefined as unknown as K); + } + } +} + +class RequestStatusIdle extends RequestStatus { + constructor() { + super(); + } +} + +class RequestStatusLoading extends RequestStatus { + constructor() { + super(RequestStatusEnum.Loading); + } +} + +class RequestStatusSuccess extends RequestStatus { + data: T; + + constructor(data: T) { + super(RequestStatusEnum.Succeeded); + this.data = data; + } +} + +class RequestStatusFailure extends RequestStatus { + error: E; + + constructor(error: E) { + super(RequestStatusEnum.Failed); + this.error = error; + } +} diff --git a/src/shared/types/result.ts b/src/shared/types/result.ts new file mode 100644 index 0000000000..0803b8a0b9 --- /dev/null +++ b/src/shared/types/result.ts @@ -0,0 +1,30 @@ +import { AppError, AppUnknownError } from "../errors/app-error"; + +export class Result { + handle(callbacks: { + onSuccess: (result: T) => any; + onFailure: (result: AppError) => any; + }): any { + if (this instanceof SuccessResult) { + return callbacks.onSuccess(this.data); + } else if (this instanceof FailureResult) { + return callbacks.onFailure(this.error); + } + } +} + +export class SuccessResult extends Result { + data: T; + constructor(data: T) { + super(); + this.data = data; + } +} + +export class FailureResult extends Result { + error: AppError; + constructor(error: AppError = new AppUnknownError()) { + super(); + this.error = error; + } +} diff --git a/src/tests/setup.ts b/src/tests/setup.ts new file mode 100644 index 0000000000..973277c8dc --- /dev/null +++ b/src/tests/setup.ts @@ -0,0 +1,9 @@ +import { expect, afterEach } from "vitest"; +import { cleanup } from "@testing-library/react"; +import matchers from "@testing-library/jest-dom/matchers"; + +expect.extend(matchers); + +afterEach(() => { + cleanup(); +}); diff --git a/src/tests/shared/components/Button.test.tsx b/src/tests/shared/components/Button.test.tsx new file mode 100644 index 0000000000..e0da1f4cb6 --- /dev/null +++ b/src/tests/shared/components/Button.test.tsx @@ -0,0 +1,26 @@ +import { fireEvent, render } from "@testing-library/react"; +import { describe, it, expect, vi } from "vitest"; +import Button from "../../../shared/components/Button"; + +describe("Button component", () => { + it("renders the button", () => { + const { getByRole } = render(); + + expect(getByRole("button")).toHaveTextContent("Hello"); + }); + + test("handles onClick event", async () => { + const handleClick = vi.fn(); + const { getByRole } = render( + + Vampire Woman + + + + + + + + + + NOSSO TIME DE DESENVOLVIMENTO + + + + + CIn UFPE Logo + + + + + + ); +}; -export default function App() { - return Loading...

} />; -} +export default App; \ No newline at end of file diff --git a/frontend/src/app/home/components/Card.tsx b/frontend/src/app/home/components/Card.tsx new file mode 100644 index 0000000000..f5e561bbc9 --- /dev/null +++ b/frontend/src/app/home/components/Card.tsx @@ -0,0 +1,35 @@ +// src/components/Card.tsx +import { Box, Heading, Image, Text } from "@chakra-ui/react"; + +interface CardProps { + imageUrl: string; + title: string; + description: string; + imageSize: { width: string; height: string }; // Adicionando a propriedade imageSize +} + +const Card = ({ imageUrl, title, description, imageSize }: CardProps) => { + return ( + + {/* Ajustando a imagem */} + + {title} + + {description} + + ); +}; + +export default Card; diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx new file mode 100644 index 0000000000..d5f5eae0cd --- /dev/null +++ b/frontend/src/index.tsx @@ -0,0 +1,18 @@ +import { ChakraProvider, extendTheme } from "@chakra-ui/react"; +import { createRoot } from "react-dom/client"; +import App from "./App"; + +const theme = extendTheme({ + fonts: { + heading: "Inter", + body: "Inter", + }, +}); + +const container = document.getElementById('root'); +const root = createRoot(container!); +root.render( + + + +); diff --git a/frontend/src/utils/cn.ts b/frontend/src/utils/cn.ts new file mode 100644 index 0000000000..cec6ac9e86 --- /dev/null +++ b/frontend/src/utils/cn.ts @@ -0,0 +1,6 @@ +import { ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} From 2afc7d889a45e0713e7f3b45cb9e7c8e0764b436 Mon Sep 17 00:00:00 2001 From: duartebianca Date: Sun, 30 Jun 2024 21:57:15 -0300 Subject: [PATCH 132/406] feat(homepage): adding animation to team photos --- .../ui/animated-tooltip-preview.tsx | 56 +++++++++ .../home/components/ui/animated-tooltip.tsx | 107 ++++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 frontend/src/app/home/components/ui/animated-tooltip-preview.tsx create mode 100644 frontend/src/app/home/components/ui/animated-tooltip.tsx diff --git a/frontend/src/app/home/components/ui/animated-tooltip-preview.tsx b/frontend/src/app/home/components/ui/animated-tooltip-preview.tsx new file mode 100644 index 0000000000..28ffe62d95 --- /dev/null +++ b/frontend/src/app/home/components/ui/animated-tooltip-preview.tsx @@ -0,0 +1,56 @@ +import React from "react"; +import { AnimatedTooltip } from "./animated-tooltip"; +import { Box } from "@chakra-ui/react"; + +const people = [ + { + id: 1, + name: "Amanda Cristina", + designation: "Salvar, gostar, compartilhar e avaliar reserva", + image: "https://i.imgur.com/B3GoJFb.png", + }, + { + id: 2, + name: "Bianca Duarte", + designation: "Cadastro, Login e tela Inicial", + image: "https://i.imgur.com/GKQzbwx.png", + }, + { + id: 3, + name: "Maria Letícia", + designation: "Promoções e Disparo de E-mails", + image: "https://i.imgur.com/RwDa0K6.png", + }, + { + id: 4, + name: "Matheus Augusto", + designation: "Métodos de Pagamento", + image: "https://i.imgur.com/2ccf5ry.png", + }, + { + id: 5, + name: "Matheus Galdino", + designation: "Busca com Filtro", + image: "https://i.imgur.com/9KP19I1.png", + }, + { + id: 6, + name: "Thaís Neves", + designation: "Gerenciar e Publicar Reservas", + image: "https://i.imgur.com/j15hgfa.png", + }, + { + id: 7, + name: "Victória Cesar", + designation: "Realizar Reservas", + image: "https://i.imgur.com/N5YaGKi.png", + }, +]; + +export function AnimatedTooltipPreview() { + return ( + + + + ); +} diff --git a/frontend/src/app/home/components/ui/animated-tooltip.tsx b/frontend/src/app/home/components/ui/animated-tooltip.tsx new file mode 100644 index 0000000000..c063414b22 --- /dev/null +++ b/frontend/src/app/home/components/ui/animated-tooltip.tsx @@ -0,0 +1,107 @@ +import React, { useState } from "react"; +import { + Avatar, + AvatarGroup, + Box, + Text, + Flex, + useColorModeValue, +} from "@chakra-ui/react"; +import { + motion, + useTransform, + AnimatePresence, + useMotionValue, + useSpring, +} from "framer-motion"; + +export const AnimatedTooltip = ({ + items, +}: { + items: { + id: number; + name: string; + designation: string; + image: string; + }[]; +}) => { + const [hoveredIndex, setHoveredIndex] = useState(null); + const springConfig = { stiffness: 100, damping: 5 }; + const x = useMotionValue(0); + const rotate = useSpring(useTransform(x, [-100, 100], [-45, 45]), springConfig); + const translateX = useSpring(useTransform(x, [-100, 100], [-50, 50]), springConfig); + + const handleMouseMove = (event: any) => { + const halfWidth = event.target.offsetWidth / 2; + x.set(event.nativeEvent.offsetX - halfWidth); + }; + + const tooltipBg = useColorModeValue("blackAlpha.700", "whiteAlpha.700"); + const tooltipTextColor = useColorModeValue("white", "black"); + + return ( + + + {items.map((item) => ( + setHoveredIndex(item.id)} + onMouseLeave={() => setHoveredIndex(null)} + > + + {hoveredIndex === item.id && ( + + + {item.name} + {item.designation} + + + )} + + + + + + ))} + + + ); +}; From dd214d7a3af0da0b004af728ef88592284388ec1 Mon Sep 17 00:00:00 2001 From: duartebianca Date: Sun, 30 Jun 2024 21:59:37 -0300 Subject: [PATCH 133/406] feat(fonts): adding custom font Hotel-trancinvania .TTF and .OTF --- .../public/fonts/Hotel_trancinvania-Regular.otf | Bin 0 -> 17776 bytes .../public/fonts/Hotel_trancinvania-Regular.ttf | Bin 0 -> 17776 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 frontend/public/fonts/Hotel_trancinvania-Regular.otf create mode 100644 frontend/public/fonts/Hotel_trancinvania-Regular.ttf diff --git a/frontend/public/fonts/Hotel_trancinvania-Regular.otf b/frontend/public/fonts/Hotel_trancinvania-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..4ef256b79d06b334d5c8c37a0a258e2f32b8738a GIT binary patch literal 17776 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%0DYSSDxs(y1@QZ_ z*&=P42N-#~!H_hZ4!hSCvX7!t18o%3^*weSNfT7Y3Xa;>>#{;*RX3NGDWZ%v{6q3t zgjXLy@P{mMY5jGk+b4=!DLa4g-0#qp)kd(99&o+a?cIYi3KDFn%xc%{IP#toPJ?0G zh;dPGI7L2#EWs?KuA7Ba9Aht86$DK=*CvU=<3+Ae2(mfvGMxFe73wXSHx$4Jj|{DB zBO%oK&Hbyg)$dNbmSLn*%VV9^2zi%db{<=*R*lGDieVYeB_3%U4VMn~)?WNa*FWvj z-rV7}E4D6;9O-u-$YYJSkr7~>m&LK&9I&_o4B;Px$s^l*!00{TQIlkgD4fAVBebJO^$Qh6jL%dx;D+Xp8CTdA0F@Odw#;-^<{jQ% z33@+Bz6l+lM30%Um<0i77|B#7cRN7L;S~Ng6QJH=M*Vz_oC&$6i473C0d{<*puApIk~f-XO`s1qJ7_bW2tWn@G3RyDhT{C;?y? z=)~zYjRMk_%M)pu)@&6;U&l-<;hbL`Nz(m&IYkMpcQN<<-X;79c*3iy3rSX>;bt$3RCqF%8!Y>L(2}+xfI=08Vp&iNeG-ABCSlTBWdjVxFm>l ze_9-LLrvH0qvVT}Zg01ol0;1}Z6r>$fTocYmYzxyMZb`!R+Vwl(JLb07cwyuj6VXj1BLy^^(lEV%X-|QpL&e~% z%{0d%UBf6T2@HZFqjSj`SWLGgz1TQkbVg8WB;`T?&4vI=sil$M3FEjh9;4FW+7;JS zHTr=^_q8UubyulbyIP;S@SapbtP(gb)yr{E7-IW}$io;f&vf?YAdy*-kjo-R6gVZ& zSomES-B9}`)z>NrmV&UL>Rkjs@@rMsQj*X#gS6O6gCz3EXEnnvcgwe*zZf0*Vq?$= zpsTCRSKK@?-<_T5-S-Sy*>bz`8giO^AHAHgE5jZ>{!6_+07lhAOR1c$75yFMb{D8NU_oI(#Cw923WMVPY*49*}iX5hSjFNCqeIAZ% z{tq~nO`H1#RnQR0#U11>-3SX(+NobR>#px1@OXTt+TF53=8_6VLgk)92P)cj_Kx3= zsMM1?$TfTwDw}qc*3K=K_sMI^P><@&L2Ey7?a*E)FcM@Opc~SRDIIm3c(<&*@l@3b z*F?pQ%T;o9`uOH~)n9IVD-2)7}$kbINlp*C5BTFZXY`F@}k5LQ+9T#g>#7 zZ#6?K`Fu8%Tb))jY~}R^^k?w)S^mx3u$g+gZ53}npf+l&tOrGtcoPM=EitdPtkJ$X z>Om}!=~f{y@GZpUojSw^oIt!%tH>AbZ9?1X4(KoI`oK-_}8U~yonHfn@K`~%u`^;2L@sQcJ znW-sOh{2hmXR7!j*%_jnbpI~EldLB2>B$u+pCg}GD*@T9w3eE(F^vX~5J8P*AUWgd zrA7%Zh7Y|;!!|rHeaHL0R-Fw@j`qm&imYN6PV5}!l=|p{`w;yNVFL5!&7`?E$@K$$ zG`ZR3U86%o#sMi~+A?`F+E~%4ir!fCCa7ZKN01psbQ(2DtgA+mu}CS<5AsYwK;^J- z+vVGRUuryd5bc2hRf!?#yVv{uTk2@Vea(fg#a+KlPCqAn5It~wJcG=?g-GRYU#7Dd z2=IkR`y5s{;$&_z_$A8SG-S+nRn3LV?nO!+{cC8VL2G8}tEzAD;xqjvOCD|Ca`K3y z=>CC|2Y2zj73vk&Yu4Jkyx z=t{s=*^JN`j6VKErT3vFtj}}nG~8~A&wWFUBza=GxVwc+rcY-1Q}?f<5F#OiPAZqZ ztF{Z_3klVve+qfdw9>YYbzDZ8sdcSyn5G^;OVQ_4c*khHpc*mBX!c6-5_%Xlp@ML2 zjt?AhTZ6>}R0H~kSw@aii#sUro-)h;gz#p}tVqNKEmxr-rE-pQ$_ynCTO3e6nHEw{ zwOz3Uj~kz)*?RbjYp@Cb9Q|aVLQ;&1#_JfW2+cao9BrC!5>=*%nk~kfhZhdYq9%t5 z-DP&0NG@x?w-xT6q)YFOk!hv|8OSwrB(Yo@$YY3N^^GUi+VskUY1#FS<`bw^E50VSCjd!sognKzAq0~B?B`$NF;vmbZ1LaG4U5>W# z;w%sAxOsu{@uU%#CcJdO-zY#nAges))+U1raG7wK0|7Jh!w+Uzv>a0Kn3t<+%Nz&R zG9&a<%c(Uqr6Q4IIyg#On$Q zVs-z^CedAKwaI@ot;CIauA%a2`#{lhyylUP({f}_GFGp!CuS^W`;Q{`KYQ|1vE^iXyXxSkXRTr(3t59#VTc{XehLzjhF>Q&Wc`9eUFKL z+93ZZAwwbBD{y}Bj)klzwlX;M(h*NR_1mrkBETQq|X2&^L<&^Gym7=^K1&mrSOT(HYBJ)87vpbTV%PS~=oT?D9`G4++XqEFnwFUJMT9_-&!N#(K-u zwC^Wss)|c5y;dBIRRN|j+(p|fZ*Q82s#?y>p_;wsX_6YqlS|DhSZiMUf1F$oy4Hk8 zK-aAM2Koo&f>`u2tC;l{Wkg1{5VC>}IuIEuozXeV*l_xAqX=np@-#k2#Z3A#!f{#T zetS;G#Y-tZXgD{h*-@V3345N;Q;5 zQW1tuQCk(Q=-7}WGi~CyC@H9Y6@xl>;dH|oO}jiB!iutLdkTH@QKx7rjQOe^1V}W{ zgJ|Q}ig-{T=}|j&1j9 z;fvO-PTGNGJQb)yREwwv;fm+c9OpxCRWQEsK(7#_boVy8HT2g=Ex%6*K3_e zed*NBLv?-M&gpGC=Xb2FEG!;qCaXxG=6rcQ*@ZrV7JB7)*UBPi3MVr+rF<&~ajtiB z{9VQQ?t+rdd^lSeQ%(@BgSzi@#Io6%asOSzT(8eH#2eg@6TuuDypRu$poVKzqzuEtJE6om*m++ zh#LU;F2)@h&n^_Tnq_-|?|H6CLQzKWPspDEZFIZf^2`(?wzO~n^+vlij^2phyQ0GA zwlfbM@1yPv2$IG4=X6E1yM##6Ki^J3Zf~c=OjE9vAVR zcVW2Agd#e3@@pjMmEZtL)~{u4A8K!qc1;r+vHig@QM!);M`G5)?lehm`_ zWdCqm5~}1C!)+PI-#OgYg)PWa=hwSG@l20DbKkj(r_Wx0@xsQPH{EvUy&HGlwsGwA zt@oVWxUjZy_Uvu9Uf4K)=0bg2{oh_zA6|!(vvU*E3lp=`vxA>~*_Ed++OV1v$(zpIf#k+H;i7OFf#3C5U%*Q^cM3NN zx8eVLv+djP|1q4u6|Z}p#r6ffoVkImv$*Eg?E3Q{`vswnm+tHTp{Lb<>UsH{vjF-D zVOm(g|Fc-n0;v8YWBci+U5T+?5bnn4&S4I9JZTy)lul;rE&rh>PW;sP*6_U3m@}u+ z&3NKV@a&72bNy#fViNQ_$6wmv`kH+@A>o8@6@2F#hzPy-EdGYWuVad*h2IyxAbc6x@d4ov>Dn=N V=Z*M#DEKQN_)8Ax3eNTF{{ceriOm22 literal 0 HcmV?d00001 diff --git a/frontend/public/fonts/Hotel_trancinvania-Regular.ttf b/frontend/public/fonts/Hotel_trancinvania-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4ef256b79d06b334d5c8c37a0a258e2f32b8738a GIT binary patch literal 17776 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%0DYSSDxs(y1@QZ_ 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 V=Z*M#DEKQN_)8Ax3eNTF{{ceriOm22 literal 0 HcmV?d00001 From ff5a33f841ac1f9d3a2ef7362847a4d37ed3461e Mon Sep 17 00:00:00 2001 From: duartebianca Date: Sun, 30 Jun 2024 22:54:51 -0300 Subject: [PATCH 134/406] fix: migration inconsistencies --- .../migration.sql | 88 ------------------- .../migration.sql | 9 +- 2 files changed, 5 insertions(+), 92 deletions(-) delete mode 100644 backend/prisma/migrations/20240616185150_add_tables_reservation_client_hotelier/migration.sql rename backend/prisma/migrations/{20240619154119_all_table => 20240701015311_all_table}/migration.sql (97%) diff --git a/backend/prisma/migrations/20240616185150_add_tables_reservation_client_hotelier/migration.sql b/backend/prisma/migrations/20240616185150_add_tables_reservation_client_hotelier/migration.sql deleted file mode 100644 index 8311992bc5..0000000000 --- a/backend/prisma/migrations/20240616185150_add_tables_reservation_client_hotelier/migration.sql +++ /dev/null @@ -1,88 +0,0 @@ -/* - Warnings: - - - A unique constraint covering the columns `[email]` on the table `hotelier` will be added. If there are existing duplicate values, this will fail. - - A unique constraint covering the columns `[username]` on the table `hotelier` will be added. If there are existing duplicate values, this will fail. - - A unique constraint covering the columns `[cnpj]` on the table `hotelier` will be added. If there are existing duplicate values, this will fail. - - Added the required column `username` to the `hotelier` table without a default value. This is not possible if the table is not empty. - -*/ --- CreateEnum -CREATE TYPE "CardType" AS ENUM ('CREDITO', 'DEBITO'); - --- AlterTable -ALTER TABLE "hotelier" ADD COLUMN "username" TEXT NOT NULL; - --- CreateTable -CREATE TABLE "Client" ( - "id" SERIAL NOT NULL, - "name" TEXT NOT NULL, - "email" TEXT NOT NULL, - "username" TEXT NOT NULL, - "phone" TEXT NOT NULL, - "password" TEXT NOT NULL, - "cpf" TEXT NOT NULL, - "birthDate" TEXT NOT NULL, - - CONSTRAINT "Client_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "PaymentMethod" ( - "id" SERIAL NOT NULL, - "name" TEXT NOT NULL, - "number" TEXT NOT NULL, - "cvv" INTEGER NOT NULL, - "expiryDate" TEXT NOT NULL, - "type" "CardType" NOT NULL, - "clientId" INTEGER NOT NULL, - - CONSTRAINT "PaymentMethod_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "Reserve" ( - "id" SERIAL NOT NULL, - "num_rooms" INTEGER NOT NULL, - "checkin" TEXT NOT NULL, - "checkout" TEXT NOT NULL, - "num_adults" INTEGER NOT NULL, - "num_children" INTEGER NOT NULL, - "paymentMethodName" TEXT NOT NULL, - "price" DOUBLE PRECISION NOT NULL, - "publishedReservationId" INTEGER NOT NULL, - "clientId" INTEGER NOT NULL, - "paymentMethodId" INTEGER NOT NULL, - - CONSTRAINT "Reserve_pkey" PRIMARY KEY ("id") -); - --- CreateIndex -CREATE UNIQUE INDEX "Client_email_key" ON "Client"("email"); - --- CreateIndex -CREATE UNIQUE INDEX "Client_username_key" ON "Client"("username"); - --- CreateIndex -CREATE UNIQUE INDEX "Client_cpf_key" ON "Client"("cpf"); - --- CreateIndex -CREATE UNIQUE INDEX "hotelier_email_key" ON "hotelier"("email"); - --- CreateIndex -CREATE UNIQUE INDEX "hotelier_username_key" ON "hotelier"("username"); - --- CreateIndex -CREATE UNIQUE INDEX "hotelier_cnpj_key" ON "hotelier"("cnpj"); - --- AddForeignKey -ALTER TABLE "PaymentMethod" ADD CONSTRAINT "PaymentMethod_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "Client"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "Reserve" ADD CONSTRAINT "Reserve_publishedReservationId_fkey" FOREIGN KEY ("publishedReservationId") REFERENCES "publishedReservation"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "Reserve" ADD CONSTRAINT "Reserve_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "Client"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "Reserve" ADD CONSTRAINT "Reserve_paymentMethodId_fkey" FOREIGN KEY ("paymentMethodId") REFERENCES "PaymentMethod"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/backend/prisma/migrations/20240619154119_all_table/migration.sql b/backend/prisma/migrations/20240701015311_all_table/migration.sql similarity index 97% rename from backend/prisma/migrations/20240619154119_all_table/migration.sql rename to backend/prisma/migrations/20240701015311_all_table/migration.sql index cc2ac866c4..e11409263f 100644 --- a/backend/prisma/migrations/20240619154119_all_table/migration.sql +++ b/backend/prisma/migrations/20240701015311_all_table/migration.sql @@ -12,7 +12,11 @@ CREATE TABLE "hotelier" ( "username" TEXT NOT NULL, "password" TEXT NOT NULL, "hotel" TEXT NOT NULL, - "adress" TEXT NOT NULL, + "city" TEXT NOT NULL, + "cep" TEXT NOT NULL, + "address" TEXT NOT NULL, + "n_address" TEXT NOT NULL, + "UF" TEXT NOT NULL, "cnpj" TEXT NOT NULL, CONSTRAINT "hotelier_pkey" PRIMARY KEY ("id") @@ -131,9 +135,6 @@ CREATE UNIQUE INDEX "client_cpf_key" ON "client"("cpf"); -- CreateIndex CREATE UNIQUE INDEX "rateReservation_reservation_id_key" ON "rateReservation"("reservation_id"); --- CreateIndex -CREATE UNIQUE INDEX "PaymentMethod_cpf_key" ON "PaymentMethod"("cpf"); - -- CreateIndex CREATE UNIQUE INDEX "PaymentMethod_clientId_numCard_key" ON "PaymentMethod"("clientId", "numCard"); From afbaa15eb6c547b67be7ffc188e1fc65008e38a5 Mon Sep 17 00:00:00 2001 From: duartebianca Date: Sun, 30 Jun 2024 23:15:36 -0300 Subject: [PATCH 135/406] fix(client, hotelier): sendEmail function parameters --- backend/package.json | 2 +- backend/src/services/client.service.ts | 2 +- backend/src/services/hotelier.service.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/package.json b/backend/package.json index 44ca85e97a..386c568d45 100644 --- a/backend/package.json +++ b/backend/package.json @@ -4,7 +4,7 @@ "description": "", "scripts": { "run": "env=dev npm run start", - "start": "env-cmd -f .env nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts", + "start": "env-cmd -f .env nodemon --watch 'src/**/*.ts' --exec ts-node src/index.ts", "build": "tsc -p .", "prod": "node dist/src/index.js", "test": "env-cmd -f .env jest --verbose --coverage --config ./jest.config.js --detectOpenHandles", diff --git a/backend/src/services/client.service.ts b/backend/src/services/client.service.ts index 291d252802..c252df8bcc 100644 --- a/backend/src/services/client.service.ts +++ b/backend/src/services/client.service.ts @@ -85,7 +85,7 @@ export default class ClientService { const token = jwt.sign({ id: client.id }, process.env.JWT_SECRET!, { expiresIn: '1h' }); const html = generateRecoveryEmailHtml(token); - await EmailService.sendEmail(email, 'Recupere sua Senha', undefined, html); + await EmailService.sendEmail(email, 'Recupere sua Senha', html); } async resetPassword(token: string, newPassword: string) { diff --git a/backend/src/services/hotelier.service.ts b/backend/src/services/hotelier.service.ts index b094c89655..219d9a57d6 100644 --- a/backend/src/services/hotelier.service.ts +++ b/backend/src/services/hotelier.service.ts @@ -72,7 +72,7 @@ async generatePasswordResetToken(email: string) { const token = jwt.sign({ id: hotelier.id }, process.env.JWT_SECRET!, { expiresIn: '1h' }); const html = generateRecoveryEmailHtml(token); - await EmailService.sendEmail(email, 'Recupere sua Senha', undefined, html); + await EmailService.sendEmail(email, 'Recupere sua Senha', html); } async resetPassword(token: string, newPassword: string) { From 01ddd9023eb026c0bba8b524b10830b51fd2ac31 Mon Sep 17 00:00:00 2001 From: duartebianca Date: Sun, 30 Jun 2024 23:30:45 -0300 Subject: [PATCH 136/406] fix: resetPasswordSchema --- backend/src/controllers/auth.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/controllers/auth.controller.ts b/backend/src/controllers/auth.controller.ts index 5b61ce0b4a..44a49ef7f2 100644 --- a/backend/src/controllers/auth.controller.ts +++ b/backend/src/controllers/auth.controller.ts @@ -8,7 +8,7 @@ import { validateData } from '../middleware/validation-middleware'; const passwordValidation = z.string().min(7, { message: "A senha deve ter mais de 6 dígitos" }); const resetPasswordSchema = z.object({ - password: passwordValidation, + newPassword: passwordValidation, token: z.string(), }); From 73d8e956ab56b88ef7e29a4fabf69346ec818dee Mon Sep 17 00:00:00 2001 From: duartebianca Date: Mon, 1 Jul 2024 20:27:26 -0300 Subject: [PATCH 137/406] fix: tests (BeforeEach) and fixing 2 client tests --- backend/tests/controllers/client.steps.ts | 228 +++---- backend/tests/controllers/email.steps.ts | 4 + backend/tests/controllers/hotelier.steps.ts | 227 +++---- backend/tests/controllers/promotion.steps.ts | 6 +- backend/tests/controllers/reserve.steps.ts | 619 ++++++++++--------- backend/tests/features/hotelier.feature | 51 +- 6 files changed, 548 insertions(+), 587 deletions(-) diff --git a/backend/tests/controllers/client.steps.ts b/backend/tests/controllers/client.steps.ts index 70c75a9123..4e6ca4952d 100644 --- a/backend/tests/controllers/client.steps.ts +++ b/backend/tests/controllers/client.steps.ts @@ -1,157 +1,171 @@ -import { defineFeature, loadFeature } from 'jest-cucumber'; +import { defineFeature, loadFeature, DefineStepFunction } from 'jest-cucumber'; import request from 'supertest'; import app from '../../src/app'; import { prismaMock } from '../../setupTests'; import { Customer } from '../../src/controllers/client.controller'; import { HttpConflictError } from '../../src/utils/errors/http.error'; +import SetupDatabaseTest from '../../src/database/setupDatabaseTest'; +import {Client} from '@prisma/client'; +import bcrypt from 'bcrypt'; const feature = loadFeature('tests/features/client.feature'); -const mockClientData = { - id: 1, - name: 'Bárbara Alencar', - email: 'barbara.alencar@gmail.com', - username: 'barbaralencar', - password: '@AmoBolo123', - cpf: '021.957.235-12', - phone: '(81) 99342-3591', - birthDate: '1984/09/12', +let lastId = 0; + +const generateId = () => { + return ++lastId; +}; + +const mockHashedPassword = '$2b$10$B9j68DzP1ruNn5qyPCqXVO.TOFNGKvldEDasLhfLOAt169ytexgxK'; + +const createClient = async (email: string, password: string) => { + return { + id: 1, + name: 'Bárbara Alencar', + email: email, + username: 'barbaralencar', + password: mockHashedPassword, + cpf: '021.957.235-12', + phone: '(81) 99342-3591', + birthDate: '1984/09/12', + }; }; +const createCustomerPayload = (name: string, email: string, username: string, cpf: string, phone: string, birthDate: string, password: string) => { + return { id: 1, name, email, username, cpf, phone, birthDate, password } as Client; +}; + + defineFeature(feature, (test) => { let response: request.Response; - let payload: Customer; + let clients: Client[] = []; + const setupDBTest = new SetupDatabaseTest(); + setupDBTest.resetDatabase(); - beforeEach(() => { + beforeEach(async () => { jest.clearAllMocks(); + jest.spyOn(bcrypt, 'hash').mockImplementation(async () => mockHashedPassword); // Mock bcrypt.hash to return the same hash + await setupDBTest.resetDatabase(); }); - test('Cadastro Bem-Sucedido de Usuário Cliente', ({ given, when, then }) => { - given('que eu sou um novo usuário', () => { - prismaMock.client.create.mockResolvedValue(mockClientData); + afterEach(async () => { + clients = []; + await setupDBTest.resetDatabase(); + }); + + const givenNewUser = (given: DefineStepFunction) => + given('que eu sou um novo usuário', async () => { + const client = await createClient('barbara.alencar@gmail.com', '@AmoBolo123'); + clients.push(client); + prismaMock.client.create.mockResolvedValue(client); }); + + + const givenEmailExists = (given: DefineStepFunction) => + given(/^que o e-mail "(.*)" já está cadastrado$/, async (email) => { + const existingClient = await createClient(email, '@AmoBolo123'); + console.log('existingClient:', existingClient); + clients.push(existingClient); + prismaMock.client.findUnique.mockResolvedValue(existingClient); + console.log('prismaMock.client.findUnique.mockResolvedValue(existingClient);', prismaMock.client.findUnique.mockResolvedValue(existingClient)); + }); + + const givenUsernameExists = (given: DefineStepFunction) => + given(/^que o nome de usuário "(.*)" já está cadastrado$/, async (username) => { + const existingClient = await createClient('barbara.alencar@gmail.com', '@AmoBolo123'); + existingClient.username = username; + prismaMock.client.findUnique.mockResolvedValue(existingClient); + }); + + const whenSendRegisterRequest = (when: DefineStepFunction) => when( /^eu envio uma solicitação de cadastro com o nome "(.*)", email "(.*)", username "(.*)", cpf "(.*)", phone "(.*)", birthDate "(.*)" e password "(.*)"$/, async (name, email, username, cpf, phone, birthDate, password) => { - payload = { name, email, username, cpf, phone, birthDate, password } as Customer; - response = await request(app).post('/client/create').send(payload); + const payload = createCustomerPayload(name, email, username, cpf, phone, birthDate, password); + //console.log('Payload enviado:', payload); + response = await request(app).post('/client/create').send(payload); + //console.log('Resposta recebida:', response.body); }, ); + const thenRegistrationShouldBeSuccessful = (then: DefineStepFunction) => then('o cadastro deve ser realizado com sucesso', () => { expect(response.status).toBe(201); }); + const thenShouldReceiveConfirmationMessage = (then: DefineStepFunction) => then('eu devo receber uma mensagem de confirmação:', (expectedResponse) => { const expected = JSON.parse(expectedResponse); expect(response.body.user).toMatchObject({ - id: mockClientData.id, - name: payload.name, - email: payload.email, - username: payload.username, - cpf: payload.cpf, - phone: payload.phone, - birthDate: payload.birthDate, - password: mockClientData.password + id: clients[0].id, + name: clients[0].name, + email: clients[0].email, + username: clients[0].username, + cpf: clients[0].cpf, + phone: clients[0].phone, + birthDate: clients[0].birthDate, + password: clients[0].password }); expect(response.body.user.id).toBeDefined(); }); - }); - - test('Cadastro Mal-Sucedido de Usuário Cliente por E-mail já Cadastrado', ({ - given, - when, - then, - }) => { - given('que o e-mail "barbara.alencar@gmail.com" já está cadastrado', () => { - prismaMock.client.findUniqueOrThrow.mockImplementation(() => { - throw new HttpConflictError({msg: 'E-mail ou nome de usuário já existe.'}); - }) - }); - - when( - /^eu envio uma solicitação de cadastro com o nome "(.*)", email "(.*)", username "(.*)", cpf "(.*)", phone "(.*)", birthDate "(.*)" e password "(.*)"$/, - async (name, email, username, cpf, phone, birthDate, password) => { - payload = { name, email, username, cpf, phone, birthDate, password } as Customer; - response = await request(app).post('/client/create').send(payload); - }, - ); + const thenRegistrationShouldFail = (then: DefineStepFunction) => then('o cadastro não deve ser realizado', () => { - console.log('Actual response status:', response.status); - console.log('Actual response body:', response.body); + if (response.status !== 409) { + console.error('Erro na solicitação Client:', response.body); + console.log('clients list', clients); + } expect(response.status).toBe(409); // Conflict status }); + const thenRegistrationShouldFailBecauseIncorretField = (then: DefineStepFunction) => + then('o cadastro não deve ser realizado', () => { + expect(response.status).toBe(400); // campo preenchido incorretamente + }); - then( - 'eu devo receber uma mensagem de erro indicando que o e-mail já está em uso:', - (expectedResponse) => { - const expected = JSON.parse(expectedResponse); - expect(response.body.msg).toBe(expected.msg); - }, - ); - }); - - test('Cadastro Mal-Sucedido de Usuário Cliente por Usuário já Cadastrado', ({ - given, - when, - then, - }) => { - given('que o nome de usuário "barbaralencar" já está cadastrado', () => { - prismaMock.client.findUniqueOrThrow.mockImplementation(() => { - throw new HttpConflictError({msg: 'E-mail ou nome de usuário já existe.'}); - }) + const thenShouldReceiveErrorMessage = (then: DefineStepFunction) => + then('eu devo receber uma mensagem de erro indicando que o e-mail já está em uso:', (expectedResponse) => { + const expected = JSON.parse(expectedResponse); + expect(response.body.msg).toBe(expected.msg); }); - when( - /^eu envio uma solicitação de cadastro com o nome "(.*)", email "(.*)", username "(.*)", cpf "(.*)", phone "(.*)", birthDate "(.*)" e password "(.*)"$/, - async (name, email, username, cpf, phone, birthDate, password) => { - payload = { name, email, username, cpf, phone, birthDate, password } as Customer; - response = await request(app).post('/client/create').send(payload); - }, - ); + const thenShouldReceiveUsernameErrorMessage = (then: DefineStepFunction) => + then('eu devo receber uma mensagem de erro indicando que o nome de usuário já está em uso:', (expectedResponse) => { + const expected = JSON.parse(expectedResponse); + expect(response.body.msg).toBe(expected.msg); + }); - then('o cadastro não deve ser realizado', () => { - console.log('Actual response status:', response.status); - console.log('Actual response body:', response.body); - expect(response).toBe({msg: 'E-mail ou nome de usuário já existe.'}); + const thenShouldReceiveInvalidPasswordMessage = (then: DefineStepFunction) => + then('eu devo receber uma mensagem de erro indicando que a senha é inválida:', (expectedResponse) => { + const expected = JSON.parse(expectedResponse); + expect(response.body.message).toContain('A senha deve ter mais de 6 dígitos'); }); - then( - 'eu devo receber uma mensagem de erro indicando que o nome de usuário já está em uso:', - (expectedResponse) => { - const expected = JSON.parse(expectedResponse); - expect(response.body.message).toBe(expected.error); - }, - ); + test('Cadastro Bem-Sucedido de Usuário Cliente', ({ given, when, then }) => { + givenNewUser(given); + whenSendRegisterRequest(when); + thenRegistrationShouldBeSuccessful(then); + thenShouldReceiveConfirmationMessage(then); }); - test('Cadastro Mal-Sucedido de Usuário Cliente por Senha Inválida', ({ given, when, then }) => { - given('que eu sou um novo usuário', () => { - // Não é necessário mockar o serviço neste caso, pois a validação falha antes de chamar o serviço - }); - - when( - /^eu envio uma solicitação de cadastro com o nome "(.*)", email "(.*)", username "(.*)", cpf "(.*)", phone "(.*)", birthDate "(.*)" e password "(.*)"$/, - async (name, email, username, cpf, phone, birthDate, password) => { - payload = { name, email, username, cpf, phone, birthDate, password } as Customer; - response = await request(app).post('/client/create').send(payload); - }, - ); + test('Cadastro Mal-Sucedido de Usuário Cliente por E-mail já Cadastrado', ({ given, when, then }) => { + givenEmailExists(given); + whenSendRegisterRequest(when); + thenRegistrationShouldFail(then); + thenShouldReceiveErrorMessage(then); + }); - then('o cadastro não deve ser realizado', () => { - console.log('Actual response status:', response.status); - console.log('Actual response body:', response.body); - expect(response.status).toBe(400); - }); + test('Cadastro Mal-Sucedido de Usuário Cliente por Usuário já Cadastrado', ({ given, when, then }) => { + givenUsernameExists(given); + whenSendRegisterRequest(when); + thenRegistrationShouldFail(then); + thenShouldReceiveUsernameErrorMessage(then); + }); - then( - 'eu devo receber uma mensagem de erro indicando que a senha é inválida:', - (expectedResponse) => { - const expected = JSON.parse(expectedResponse); - expect(response.body.message[0]).toBe(expected.error); // Atualizado para corresponder à resposta real - }, - ); + test('Cadastro Mal-Sucedido de Usuário Cliente por Senha Inválida', ({ given, when, then }) => { + givenNewUser(given); + whenSendRegisterRequest(when); + thenRegistrationShouldFailBecauseIncorretField(then); + thenShouldReceiveInvalidPasswordMessage(then); }); }); diff --git a/backend/tests/controllers/email.steps.ts b/backend/tests/controllers/email.steps.ts index 55d97e7e65..14cf9744d6 100644 --- a/backend/tests/controllers/email.steps.ts +++ b/backend/tests/controllers/email.steps.ts @@ -87,6 +87,10 @@ defineFeature(feature, (test) => { const setupDBTest = new SetupDatabaseTest(); setupDBTest.resetDatabase(); + beforeEach(async () => { + await setupDBTest.resetDatabase(); + }); + afterEach(async () => { clients = []; reserves = []; diff --git a/backend/tests/controllers/hotelier.steps.ts b/backend/tests/controllers/hotelier.steps.ts index b9f82d46bf..1eb528af03 100644 --- a/backend/tests/controllers/hotelier.steps.ts +++ b/backend/tests/controllers/hotelier.steps.ts @@ -1,142 +1,107 @@ -import { defineFeature, loadFeature } from 'jest-cucumber'; +import { defineFeature, loadFeature, DefineStepFunction } from 'jest-cucumber'; import request from 'supertest'; import app from '../../src/app'; import { prismaMock } from '../../setupTests'; -import { Hotelier } from '../../src/controllers/hotelier.controller'; -import { HttpConflictError } from '../../src/utils/errors/http.error'; +import { Hotelier } from '@prisma/client'; +import bcrypt from 'bcrypt'; +import SetupDatabaseTest from '../../src/database/setupDatabaseTest'; const feature = loadFeature('tests/features/hotelier.feature'); -const mockHotelierData = { - id: 1, - name: 'Mavis', - email: 'mavis.dracula@gmail.com', - username: 'mavis', - password: '@Vampiresca1', - cnpj: '12.215.333/0001-33', - adress: 'Rua das Sextas, 13', - hotel: 'Hotel Transilvânia', -}; - -defineFeature(feature, (test) => { - let response: request.Response; - let payload: Hotelier; +let lastId = 0; - beforeEach(() => { - jest.clearAllMocks(); - }); +const generateId = () => { + return ++lastId; +}; - test('Cadastro Bem-Sucedido de Usuário Hoteleiro', ({ given, when, then }) => { - given('que eu sou um novo usuário', () => { - prismaMock.hotelier.create.mockResolvedValue(mockHotelierData); - }); +const mockHashedPassword = '$2b$10$B9j68DzP1ruNn5qyPCqXVO.TOFNGKvldEDasLhfLOAt169ytexgxK'; + +const createHotelier = async (hotel: string, email: string, password: string) => { + return { + id: generateId(), + name: 'Maria Letícia', + email: email, + username: 'mlng', + password: mockHashedPassword, + hotel: hotel, + city: 'Paulista', + cep: '2621721', + address: 'Rua vale', + n_address: '123', + UF: 'PE', + cnpj: '123.456.789-01', + }; +}; - when( - /^eu envio uma solicitação de cadastro com o nome "(.*)", email "(.*)", username "(.*)", cnpj "(.*)", adress "(.*)", hotel "(.*)" e password "(.*)"$/, - async (name, email, username, cnpj, adress, hotel, password) => { - payload = { name, email, username, cnpj, adress, hotel, password } as Hotelier; - response = await request(app).post('/hotelier/create').send(payload); - }, - ); +const createHotelierPayload = (hotel: string, email: string, username: string, password: string, city: string, cep: string, address: string, n_address: string, UF: string, cnpj: string) => { + return { id: generateId(), hotel, email, username, password, city, cep, address, n_address, UF, cnpj } as Hotelier; +}; - then('o cadastro deve ser realizado com sucesso', () => { +defineFeature(feature, (test) => { + let response: request.Response; + let hoteliers: Hotelier[] = []; + const setupDBTest = new SetupDatabaseTest(); + setupDBTest.resetDatabase(); + + beforeEach(async () => { + jest.clearAllMocks(); + jest.spyOn(bcrypt, 'hash').mockImplementation(async () => mockHashedPassword); // Mock bcrypt.hash to return the same hash + await setupDBTest.resetDatabase(); + }); + + afterEach(async () => { + hoteliers = []; + await setupDBTest.resetDatabase(); + }); + + const givenNewHotelier = (given: DefineStepFunction) => + given('que eu sou um novo hoteleiro', async () => { + const hotelier = await createHotelier('Polenguito Hotel', 'mleticiagaspar17@gmail.com', '@AmoHotel123'); + hoteliers.push(hotelier); + prismaMock.hotelier.create.mockResolvedValue(hotelier); + }); + + const whenSendRegisterRequest = (when: DefineStepFunction) => + when( + /^eu envio uma solicitação de cadastro com o hotel "(.*)", email "(.*)", username "(.*)", password "(.*)", cidade "(.*)", cep "(.*)", endereço "(.*)", número do endereço "(.*)", UF "(.*)" e CNPJ "(.*)"$/, + async (hotel, email, username, password, city, cep, address, n_address, UF, cnpj) => { + const payload = createHotelierPayload(hotel, email, username, password, city, cep, address, n_address, UF, cnpj); + response = await request(app).post('/hotelier/create').send(payload); + }, + ); + + const thenRegistrationShouldBeSuccessful = (then: DefineStepFunction) => + then('o cadastro deve ser realizado com sucesso', () => { + //if (response.status !== 201) { + // console.error('Erro na solicitação Hotelier:', response.body); + //} expect(response.status).toBe(201); - }); - - then('eu devo receber uma mensagem de confirmação:', (expectedResponse) => { - const expected = JSON.parse(expectedResponse); - expect(response.body.user).toMatchObject({ - id: mockHotelierData.id, - name: payload.name, - email: payload.email, - username: payload.username, - cnpj: payload.cnpj, - adress: payload.adress, - hotel: payload.hotel, - password: mockHotelierData.password - }); - expect(response.body.user.id).toBeDefined(); - }); - }); - - test('Cadastro Mal-Sucedido de Usuário Hoteleiro por E-mail já Cadastrado', ({ - given, - when, - then, - }) => { - given('que o email "mavis.dracula@gmail.com" já está cadastrado', () => { - prismaMock.hotelier.findUniqueOrThrow.mockImplementation(() => { - throw new HttpConflictError({ msg: 'E-mail ou nome de usuário já existe.' }); - }); - }); - - when( - /^eu envio uma solicitação de cadastro com o nome "(.*)", email "(.*)", username "(.*)", cnpj "(.*)", adress "(.*)", hotel "(.*)" e password "(.*)"$/, - async (name, email, username, cnpj, adress, hotel, password) => { - payload = { name, email, username, cnpj, adress, hotel, password } as Hotelier; - response = await request(app).post('/hotelier/create').send(payload); - }, - ); - - then('o cadastro não deve ser realizado', () => { - expect(response.status).toBe(409); // Conflict status - }); - - then('eu devo receber uma mensagem de erro indicando que o e-mail já está em uso:', (expectedResponse) => { - const expected = JSON.parse(expectedResponse); - expect(response.body.msg).toBe(expected.error); - }); - }); - - test('Cadastro Mal-Sucedido de Usuário Hoteleiro por Usuário já Cadastrado', ({ - given, - when, - then, - }) => { - given('que o username "mavis" já está cadastrado', () => { - prismaMock.hotelier.findUniqueOrThrow.mockImplementation(() => { - throw new HttpConflictError({ msg: 'E-mail ou nome de usuário já existe.' }); - }); - }); - - when( - /^eu envio uma solicitação de cadastro com o nome "(.*)", email "(.*)", username "(.*)", cnpj "(.*)", adress "(.*)", hotel "(.*)" e password "(.*)"$/, - async (name, email, username, cnpj, adress, hotel, password) => { - payload = { name, email, username, cnpj, adress, hotel, password } as Hotelier; - response = await request(app).post('/hotelier/create').send(payload); - }, - ); - - then('o cadastro não deve ser realizado', () => { - expect(response.status).toBe(409); // Conflict status - }); - - then('eu devo receber uma mensagem de erro indicando que o nome de usuário já está em uso:', (expectedResponse) => { - const expected = JSON.parse(expectedResponse); - expect(response.body.msg).toBe(expected.error); - }); - }); - - test('Cadastro Mal-Sucedido de Usuário Hoteleiro por Senha Inválida', ({ given, when, then }) => { - given('que eu sou um novo usuário', () => { - // Não é necessário mockar o serviço neste caso, pois a validação falha antes de chamar o serviço - }); - - when( - /^eu envio uma solicitação de cadastro com o nome "(.*)", email "(.*)", username "(.*)", cnpj "(.*)", adress "(.*)", hotel "(.*)" e password "(.*)"$/, - async (name, email, username, cnpj, adress, hotel, password) => { - payload = { name, email, username, cnpj, adress, hotel, password } as Hotelier; - response = await request(app).post('/hotelier/create').send(payload); - }, - ); - - then('o cadastro não deve ser realizado', () => { - expect(response.status).toBe(400); - }); - - then('eu devo receber uma mensagem de erro indicando que a senha é inválida:', (expectedResponse) => { - const expected = JSON.parse(expectedResponse); - expect(response.body.message[0]).toBe(expected.error); - }); - }); -}); \ No newline at end of file + }); + + const thenShouldReceiveConfirmationMessage = (then: DefineStepFunction) => + then('eu devo receber uma mensagem de confirmação:', (expectedResponse) => { + const expected = JSON.parse(expectedResponse); + expect(response.body.hotelier).toMatchObject({ + id: hoteliers[0].id, + name: hoteliers[0].name, + email: hoteliers[0].email, + username: hoteliers[0].username, + password: hoteliers[0].password, + hotel: hoteliers[0].hotel, + city: hoteliers[0].city, + cep: hoteliers[0].cep, + address: hoteliers[0].address, + n_address: hoteliers[0].n_address, + UF: hoteliers[0].UF, + cnpj: hoteliers[0].cnpj, + }); + expect(response.body.hotelier.id).toBeDefined(); + }); + + test('Cadastro Bem-Sucedido de Usuário Hoteleiro', ({ given, when, then }) => { + givenNewHotelier(given); + whenSendRegisterRequest(when); + thenRegistrationShouldBeSuccessful(then); + thenShouldReceiveConfirmationMessage(then); + }); +}); diff --git a/backend/tests/controllers/promotion.steps.ts b/backend/tests/controllers/promotion.steps.ts index 97ea44e144..81e454b2e9 100644 --- a/backend/tests/controllers/promotion.steps.ts +++ b/backend/tests/controllers/promotion.steps.ts @@ -33,7 +33,7 @@ defineFeature(feature, (test) => { const setupDBTest = new SetupDatabaseTest(); setupDBTest.resetDatabase(); - + const createPublishedReservation = async (name: string, price: number) => { return { id: publishedReservation.length + 1, @@ -79,6 +79,10 @@ defineFeature(feature, (test) => { } } + beforeEach(async () => { + await setupDBTest.resetDatabase(); + }); + afterEach(async () => { promotions = []; publishedReservation = []; diff --git a/backend/tests/controllers/reserve.steps.ts b/backend/tests/controllers/reserve.steps.ts index 24ccb5e106..38a35688e0 100644 --- a/backend/tests/controllers/reserve.steps.ts +++ b/backend/tests/controllers/reserve.steps.ts @@ -1,308 +1,311 @@ -import { loadFeature, defineFeature, DefineStepFunction } from 'jest-cucumber'; -import supertest from 'supertest'; -import app from '../../src/app'; -import {Reserve, PublishedReservation, PaymentMethod, CardType, Client} from '@prisma/client'; -import prisma from '../../src/database'; -import { prismaMock } from "../../setupTests"; -import SetupDatabaseTest from "../../src/database/setupDatabaseTest"; - -const feature = loadFeature('tests/features/reserve.feature'); - -const request = supertest(app); - -const createClient = async (email: string, password: string) => { - return{ - id: 1, - name: 'Victoria Cesar', - email: email, - username: 'viccesar', - phone: '81998713499', - password: password, - cpf: '70558989438', - birthDate: '2003-04-24', - } -} - -const createHotelier = { - id: 1, - name: 'Maria Letícia', - email: 'mleticiagaspar17@gmail.com', - username: 'let', - password: 'let123', - hotel: 'polengrito', - city: 'Paulista', - cep: '2621721', - address: 'Rua vale', - n_address: '123', - UF: 'PE', - cnpj: '123.456.789-01', -} - -const createPublishedReservation = async (name: string, rooms: number, people: number, price: number) => { - return { - id: 1, - name: name, - rooms: rooms, - people: people, - wifi: true, - breakfast: true, - airConditioner: true, - parking: true, - room_service: true, - price: price, - new_price: 1000, - promotion_id: null, - hotelier_id: 1, - } -} - -const createPaymentMethod = async(name: string, clientId: number) => { - return{ - id: 1, - name: name, - numCard: "1234567891010112", - cvv: 300, - expiryDate: "09/28", - type: CardType.CREDITO, - clientId: clientId, - cpf: '70558989438' - } -} - -defineFeature(feature, (test) => { - let response: supertest.Response; - let reservations: Reserve[] = []; - let clients: Client[] = []; - let payments: PaymentMethod[] = []; - let publishedReservations: PublishedReservation[] = []; - - const setupDBTest = new SetupDatabaseTest(); - setupDBTest.resetDatabase(); - - const createReservation = async (num_rooms: number, checkin: string, checkout: string, num_adults: number, num_children: number, paymentMethodName: string) => { - return { - id: reservations.length + 1, - num_rooms: num_rooms, - checkin: checkin, - checkout: checkout, - num_adults: num_adults, - num_children: num_children, - paymentMethodName: paymentMethodName, - price: 2000, - publishedReservationId: 1, - clientId: 1, - paymentMethodId: 1 - } - } - - afterEach(async () => { - clients = [], - payments = [], - publishedReservations = [], - reservations = [], - await setupDBTest.resetDatabase(); - }); - - const givenClientExist = (given: DefineStepFunction) => - given(/^existe um usuário "(.*)" com o e-mail "(.*)" e a senha "(.*)"$/, async(user, email, password) => { - expect(user).toBe('Cliente'); - const cliente = await createClient(email, password); - clients.push(cliente); - prismaMock.client.findUnique.mockResolvedValue(cliente); - }); - - const givenPaymentMethodExist = (given: DefineStepFunction) => - given(/^um método de pagamento com id "(.*)" e com nome "(.*)" está registrado nos métodos de pagamentos do usuário de id "(.*)"$/, async(id, name, clientId) => { - expect(id).toBe("1"); - const paymentMethod = await createPaymentMethod(name, parseInt(clientId, 10)); - payments.push(paymentMethod); - prismaMock.paymentMethod.findUnique.mockResolvedValue(paymentMethod); - }); - - const givenPage = (given: DefineStepFunction) => - given (/^está na página "(.*)"$/, async(page) => { - expect(page).toBe('Quarto Zumbi Digital'); - }); - - const givenMyPage = (given: DefineStepFunction) => - given (/^está na página "(.*)"$/, async(page) => { - expect(page).toBe('Minhas reservas'); - }); - - const givenPublishedReservationExist = (given: DefineStepFunction) => - given(/^existe a oferta com nome "(.*)" com id "(.*)", com quartos "(.*)", pessoas "(.*)" e preço "(.*)"$/, async(name, id, rooms, people, price) => { - expect(id).toBe("1"); - const publishedReservation = await createPublishedReservation(name, parseInt(rooms, 10), parseInt(people, 10), parseFloat(price)); - publishedReservations.push(publishedReservation); - prismaMock.publishedReservation.findUnique.mockResolvedValue(publishedReservation); - }); - - const givenReservationExist = (given: DefineStepFunction) => - given(/^existe a reserva com id "(.*)", com quartos "(.*)", checkin "(.*)", checkout "(.*)", adultos "(.*)", crianças "(.*)", pagamento "(.*)", preço "(.*)", id da reserva "(.*)", id do cliente "(.*)" e id do pagamento "(.*)"$/, async(id, num_rooms, checkin, checkout, num_adults, num_children, paymentMethodName, publishedReservationId, clientId, paymentMethodId) => { - expect(id).toBe("1"); - const reservation = await createReservation(parseInt(num_rooms), checkin, checkout, parseInt(num_adults), parseInt(num_children), paymentMethodName); - reservations.push(reservation); - prismaMock.reserve.findUnique.mockResolvedValue(reservation); - }); - - const whenReservationPost = (when: DefineStepFunction) => - when (/^uma requisição POST é enviada para "(.*)" com quartos "(.*)", checkin "(.*)", checkout "(.*)", adultos "(.*)", crianças "(.*)" e pagamento "(.*)"$/, async(url, num_rooms, checkin, checkout, num_adults, num_children, paymentMethodName) => { - await setupDBTest.setupDatabaseforReservationTests(clients[0], createHotelier, publishedReservations[0], payments[0]); - response = await request.post(url).send({ - num_rooms: parseInt(num_rooms,10), - checkin, - checkout, - num_adults: parseInt(num_adults,10), - num_children: parseInt(num_children,10), - paymentMethodName - }); - }); - - const whenReservationPostWithoutPayment = (when: DefineStepFunction) => - when (/^uma requisição POST é enviada para "(.*)" com quartos "(.*)", checkin "(.*)", checkout "(.*)", adultos "(.*)", crianças "(.*)" e pagamento "(.*)"$/, async(url, num_rooms, checkin, checkout, num_adults, num_children, paymentMethodName) => { - await setupDBTest.setupDatabaseforReservationTests(clients[0], createHotelier, publishedReservations[0]); - response = await request.post(url).send({ - num_rooms: parseInt(num_rooms,10), - checkin, - checkout, - num_adults: parseInt(num_adults,10), - num_children: parseInt(num_children,10), - paymentMethodName - }); - }); - - const whenReservationPut = (when: DefineStepFunction) => - when(/^uma requisição PUT é enviada para "(.*)" com quartos "(.*)", checkin "(.*)", checkout "(.*)", adultos "(.*)", crianças "(.*)" e pagamento "(.*)"$/, async(url, num_rooms, checkin, checkout, num_adults, num_children, paymentMethodName) => { - prismaMock.reserve.findUnique.mockResolvedValue(reservations[0]); - const requestData = { - num_rooms: parseInt(num_rooms, 10), - checkin, - checkout, - num_adults: parseInt(num_adults, 10), - num_children: parseInt(num_children, 10), - paymentMethodName - }; - await setupDBTest.setupDatabaseforReservationTests(clients[0], createHotelier, publishedReservations[0], payments[0], reservations[0]); - response = await request.put(url).send(requestData); - }); - - const whenReservationDelete = (when: DefineStepFunction) => - when(/^uma requisição DELETE é enviada para "(.*)"$/, async(url) => { - prismaMock.reserve.findUnique.mockResolvedValue(reservations[0]); - await setupDBTest.setupDatabaseforReservationTests(clients[0], createHotelier, publishedReservations[0], payments[0], reservations[0]); - response = await request.delete(url); - }); - - const thenStatusIsReturned = (then: DefineStepFunction) => - then(/^o status da resposta deve ser "(.*)"$/, async(status) => { - expect(response.status).toBe(parseInt(status, 10)); - }); - - const thenReturnedMessage = (then: DefineStepFunction) => - then(/^é retornada a mensagem "(.*)"$/, async(message) => { - expect(response.body.message).toEqual(message); - }); - - test('Reserva realizada com sucesso', ({ given, when, then, and }) =>{ - givenClientExist(given); - givenPaymentMethodExist(and); - givenPage(and); - givenPublishedReservationExist(and); - whenReservationPost(when); - thenStatusIsReturned(then); - thenReturnedMessage(and); - }); - - test('Realização de reserva mal sucedida (Campos obrigatórios não preenchidos)', ({ given, when, then, and }) => { - givenClientExist(given); - givenPaymentMethodExist(and); - givenPage(and); - givenPublishedReservationExist(and); - whenReservationPost(when); - thenStatusIsReturned(then); - thenReturnedMessage(and); - }); - - test('Realização de reserva mal sucedida (Cliente não existe - não está logado)', ({ given, when, then, and }) => { - givenClientExist(given); - givenPage(and); - givenPublishedReservationExist(and); - whenReservationPostWithoutPayment(when); - thenStatusIsReturned(then); - thenReturnedMessage(and); - }); - - test('Realização de reserva mal sucedida (Pagamento não existe)', ({ given, when, then, and }) => { - givenClientExist(given); - givenPage(and); - givenPublishedReservationExist(and); - whenReservationPostWithoutPayment(when); - thenStatusIsReturned(then); - thenReturnedMessage(and); - }); - - test('Realização de reserva mal sucedida (Capacidade do quarto excedida)', ({ given, when, then, and }) => { - givenClientExist(given); - givenPaymentMethodExist(and); - givenPage(and); - givenPublishedReservationExist(and); - whenReservationPost(when); - thenStatusIsReturned(then); - thenReturnedMessage(and); - }); - - test('Realização de reserva mal sucedida (Todos os quartos ocupados no período selecionado)', ({ given, when, then, and }) => { - givenClientExist(given); - givenPaymentMethodExist(and); - givenPage(and); - givenPublishedReservationExist(and); - whenReservationPost(when); - thenStatusIsReturned(then); - thenReturnedMessage(and); - }); - - test('Reserva atualizada com sucesso', ({ given, when, then, and }) => { - givenClientExist(given); - givenPaymentMethodExist(and); - givenMyPage(and); - givenPublishedReservationExist(and); - givenReservationExist(and); - whenReservationPut(when); - thenStatusIsReturned(then); - thenReturnedMessage(and); - }); - - test('Atualização de reserva mal-sucedida (Campos obrigatórios não preenchidos)', ({ given, when, then, and }) =>{ - givenClientExist(given); - givenPaymentMethodExist(and); - givenMyPage(and); - givenPublishedReservationExist(and); - givenReservationExist(and); - whenReservationPut(when); - thenStatusIsReturned(then); - thenReturnedMessage(then); - }); - - test('Atualização de reserva mal-sucedida (Indisponibilidade de quartos)', ({ given, when, then, and }) => { - givenClientExist(given); - givenPaymentMethodExist(and); - givenMyPage(and); - givenReservationExist(and); - givenPublishedReservationExist(and); - whenReservationPut(when); - thenStatusIsReturned(then); - thenReturnedMessage(then); - }); - - test('Reserva cancelada com sucesso', ({ given, when, then, and }) => { - givenClientExist(given); - givenPaymentMethodExist(and); - givenMyPage(and); - givenPublishedReservationExist(and); - givenReservationExist(and); - whenReservationDelete(when); - thenStatusIsReturned(then); - thenReturnedMessage(then); - }); - - }) +import { loadFeature, defineFeature, DefineStepFunction } from 'jest-cucumber'; +import supertest from 'supertest'; +import app from '../../src/app'; +import {Reserve, PublishedReservation, PaymentMethod, CardType, Client} from '@prisma/client'; +import prisma from '../../src/database'; +import { prismaMock } from "../../setupTests"; +import SetupDatabaseTest from "../../src/database/setupDatabaseTest"; + +const feature = loadFeature('tests/features/reserve.feature'); + +const request = supertest(app); + +const createClient = async (email: string, password: string) => { + return{ + id: 1, + name: 'Victoria Cesar', + email: email, + username: 'viccesar', + phone: '81998713499', + password: password, + cpf: '70558989438', + birthDate: '2003-04-24', + } +} + +const createHotelier = { + id: 1, + name: 'Maria Letícia', + email: 'mleticiagaspar17@gmail.com', + username: 'let', + password: 'let123', + hotel: 'polengrito', + city: 'Paulista', + cep: '2621721', + address: 'Rua vale', + n_address: '123', + UF: 'PE', + cnpj: '123.456.789-01', +} + +const createPublishedReservation = async (name: string, rooms: number, people: number, price: number) => { + return { + id: 1, + name: name, + rooms: rooms, + people: people, + wifi: true, + breakfast: true, + airConditioner: true, + parking: true, + room_service: true, + price: price, + new_price: 1000, + promotion_id: null, + hotelier_id: 1, + } +} + +const createPaymentMethod = async(name: string, clientId: number) => { + return{ + id: 1, + name: name, + numCard: "1234567891010112", + cvv: 300, + expiryDate: "09/28", + type: CardType.CREDITO, + clientId: clientId, + cpf: '70558989438' + } +} + +defineFeature(feature, (test) => { + let response: supertest.Response; + let reservations: Reserve[] = []; + let clients: Client[] = []; + let payments: PaymentMethod[] = []; + let publishedReservations: PublishedReservation[] = []; + const setupDBTest = new SetupDatabaseTest(); + setupDBTest.resetDatabase(); + + const createReservation = async (num_rooms: number, checkin: string, checkout: string, num_adults: number, num_children: number, paymentMethodName: string) => { + return { + id: reservations.length + 1, + num_rooms: num_rooms, + checkin: checkin, + checkout: checkout, + num_adults: num_adults, + num_children: num_children, + paymentMethodName: paymentMethodName, + price: 2000, + publishedReservationId: 1, + clientId: 1, + paymentMethodId: 1 + } + } + + beforeEach(async () => { + await setupDBTest.resetDatabase(); + }); + + afterEach(async () => { + clients = [], + payments = [], + publishedReservations = [], + reservations = [], + await setupDBTest.resetDatabase(); + }); + + const givenClientExist = (given: DefineStepFunction) => + given(/^existe um usuário "(.*)" com o e-mail "(.*)" e a senha "(.*)"$/, async(user, email, password) => { + expect(user).toBe('Cliente'); + const cliente = await createClient(email, password); + clients.push(cliente); + prismaMock.client.findUnique.mockResolvedValue(cliente); + }); + + const givenPaymentMethodExist = (given: DefineStepFunction) => + given(/^um método de pagamento com id "(.*)" e com nome "(.*)" está registrado nos métodos de pagamentos do usuário de id "(.*)"$/, async(id, name, clientId) => { + expect(id).toBe("1"); + const paymentMethod = await createPaymentMethod(name, parseInt(clientId, 10)); + payments.push(paymentMethod); + prismaMock.paymentMethod.findUnique.mockResolvedValue(paymentMethod); + }); + + const givenPage = (given: DefineStepFunction) => + given (/^está na página "(.*)"$/, async(page) => { + expect(page).toBe('Quarto Zumbi Digital'); + }); + + const givenMyPage = (given: DefineStepFunction) => + given (/^está na página "(.*)"$/, async(page) => { + expect(page).toBe('Minhas reservas'); + }); + + const givenPublishedReservationExist = (given: DefineStepFunction) => + given(/^existe a oferta com nome "(.*)" com id "(.*)", com quartos "(.*)", pessoas "(.*)" e preço "(.*)"$/, async(name, id, rooms, people, price) => { + expect(id).toBe("1"); + const publishedReservation = await createPublishedReservation(name, parseInt(rooms, 10), parseInt(people, 10), parseFloat(price)); + publishedReservations.push(publishedReservation); + prismaMock.publishedReservation.findUnique.mockResolvedValue(publishedReservation); + }); + + const givenReservationExist = (given: DefineStepFunction) => + given(/^existe a reserva com id "(.*)", com quartos "(.*)", checkin "(.*)", checkout "(.*)", adultos "(.*)", crianças "(.*)", pagamento "(.*)", preço "(.*)", id da reserva "(.*)", id do cliente "(.*)" e id do pagamento "(.*)"$/, async(id, num_rooms, checkin, checkout, num_adults, num_children, paymentMethodName, publishedReservationId, clientId, paymentMethodId) => { + expect(id).toBe("1"); + const reservation = await createReservation(parseInt(num_rooms), checkin, checkout, parseInt(num_adults), parseInt(num_children), paymentMethodName); + reservations.push(reservation); + prismaMock.reserve.findUnique.mockResolvedValue(reservation); + }); + + const whenReservationPost = (when: DefineStepFunction) => + when (/^uma requisição POST é enviada para "(.*)" com quartos "(.*)", checkin "(.*)", checkout "(.*)", adultos "(.*)", crianças "(.*)" e pagamento "(.*)"$/, async(url, num_rooms, checkin, checkout, num_adults, num_children, paymentMethodName) => { + await setupDBTest.setupDatabaseforReservationTests(clients[0], createHotelier, publishedReservations[0], payments[0]); + response = await request.post(url).send({ + num_rooms: parseInt(num_rooms,10), + checkin, + checkout, + num_adults: parseInt(num_adults,10), + num_children: parseInt(num_children,10), + paymentMethodName + }); + }); + + const whenReservationPostWithoutPayment = (when: DefineStepFunction) => + when (/^uma requisição POST é enviada para "(.*)" com quartos "(.*)", checkin "(.*)", checkout "(.*)", adultos "(.*)", crianças "(.*)" e pagamento "(.*)"$/, async(url, num_rooms, checkin, checkout, num_adults, num_children, paymentMethodName) => { + await setupDBTest.setupDatabaseforReservationTests(clients[0], createHotelier, publishedReservations[0]); + response = await request.post(url).send({ + num_rooms: parseInt(num_rooms,10), + checkin, + checkout, + num_adults: parseInt(num_adults,10), + num_children: parseInt(num_children,10), + paymentMethodName + }); + }); + + const whenReservationPut = (when: DefineStepFunction) => + when(/^uma requisição PUT é enviada para "(.*)" com quartos "(.*)", checkin "(.*)", checkout "(.*)", adultos "(.*)", crianças "(.*)" e pagamento "(.*)"$/, async(url, num_rooms, checkin, checkout, num_adults, num_children, paymentMethodName) => { + prismaMock.reserve.findUnique.mockResolvedValue(reservations[0]); + const requestData = { + num_rooms: parseInt(num_rooms, 10), + checkin, + checkout, + num_adults: parseInt(num_adults, 10), + num_children: parseInt(num_children, 10), + paymentMethodName + }; + await setupDBTest.setupDatabaseforReservationTests(clients[0], createHotelier, publishedReservations[0], payments[0], reservations[0]); + response = await request.put(url).send(requestData); + }); + + const whenReservationDelete = (when: DefineStepFunction) => + when(/^uma requisição DELETE é enviada para "(.*)"$/, async(url) => { + prismaMock.reserve.findUnique.mockResolvedValue(reservations[0]); + await setupDBTest.setupDatabaseforReservationTests(clients[0], createHotelier, publishedReservations[0], payments[0], reservations[0]); + response = await request.delete(url); + }); + + const thenStatusIsReturned = (then: DefineStepFunction) => + then(/^o status da resposta deve ser "(.*)"$/, async(status) => { + expect(response.status).toBe(parseInt(status, 10)); + }); + + const thenReturnedMessage = (then: DefineStepFunction) => + then(/^é retornada a mensagem "(.*)"$/, async(message) => { + expect(response.body.message).toEqual(message); + }); + + test('Reserva realizada com sucesso', ({ given, when, then, and }) =>{ + givenClientExist(given); + givenPaymentMethodExist(and); + givenPage(and); + givenPublishedReservationExist(and); + whenReservationPost(when); + thenStatusIsReturned(then); + thenReturnedMessage(and); + }); + + test('Realização de reserva mal sucedida (Campos obrigatórios não preenchidos)', ({ given, when, then, and }) => { + givenClientExist(given); + givenPaymentMethodExist(and); + givenPage(and); + givenPublishedReservationExist(and); + whenReservationPost(when); + thenStatusIsReturned(then); + thenReturnedMessage(and); + }); + + test('Realização de reserva mal sucedida (Cliente não existe - não está logado)', ({ given, when, then, and }) => { + givenClientExist(given); + givenPage(and); + givenPublishedReservationExist(and); + whenReservationPostWithoutPayment(when); + thenStatusIsReturned(then); + thenReturnedMessage(and); + }); + + test('Realização de reserva mal sucedida (Pagamento não existe)', ({ given, when, then, and }) => { + givenClientExist(given); + givenPage(and); + givenPublishedReservationExist(and); + whenReservationPostWithoutPayment(when); + thenStatusIsReturned(then); + thenReturnedMessage(and); + }); + + test('Realização de reserva mal sucedida (Capacidade do quarto excedida)', ({ given, when, then, and }) => { + givenClientExist(given); + givenPaymentMethodExist(and); + givenPage(and); + givenPublishedReservationExist(and); + whenReservationPost(when); + thenStatusIsReturned(then); + thenReturnedMessage(and); + }); + + test('Realização de reserva mal sucedida (Todos os quartos ocupados no período selecionado)', ({ given, when, then, and }) => { + givenClientExist(given); + givenPaymentMethodExist(and); + givenPage(and); + givenPublishedReservationExist(and); + whenReservationPost(when); + thenStatusIsReturned(then); + thenReturnedMessage(and); + }); + + test('Reserva atualizada com sucesso', ({ given, when, then, and }) => { + givenClientExist(given); + givenPaymentMethodExist(and); + givenMyPage(and); + givenPublishedReservationExist(and); + givenReservationExist(and); + whenReservationPut(when); + thenStatusIsReturned(then); + thenReturnedMessage(and); + }); + + test('Atualização de reserva mal-sucedida (Campos obrigatórios não preenchidos)', ({ given, when, then, and }) =>{ + givenClientExist(given); + givenPaymentMethodExist(and); + givenMyPage(and); + givenPublishedReservationExist(and); + givenReservationExist(and); + whenReservationPut(when); + thenStatusIsReturned(then); + thenReturnedMessage(then); + }); + + test('Atualização de reserva mal-sucedida (Indisponibilidade de quartos)', ({ given, when, then, and }) => { + givenClientExist(given); + givenPaymentMethodExist(and); + givenMyPage(and); + givenReservationExist(and); + givenPublishedReservationExist(and); + whenReservationPut(when); + thenStatusIsReturned(then); + thenReturnedMessage(then); + }); + + test('Reserva cancelada com sucesso', ({ given, when, then, and }) => { + givenClientExist(given); + givenPaymentMethodExist(and); + givenMyPage(and); + givenPublishedReservationExist(and); + givenReservationExist(and); + whenReservationDelete(when); + thenStatusIsReturned(then); + thenReturnedMessage(then); + }); + + }) diff --git a/backend/tests/features/hotelier.feature b/backend/tests/features/hotelier.feature index f0e0a69989..4daf661e72 100644 --- a/backend/tests/features/hotelier.feature +++ b/backend/tests/features/hotelier.feature @@ -1,58 +1,29 @@ -Feature: Criar cadastro de clientes +Feature: Cadastro de Hoteleiros As a Usuário "Hoteleiro" I want to cadastrar-me na plataforma de reserva de hoteis “hotel trancinvânia” So that eu possa realizar ações no sistema de acordo com meu tipo de usuário Scenario: Cadastro Bem-Sucedido de Usuário Hoteleiro - Given que eu sou um novo usuário - When eu envio uma solicitação de cadastro com o nome "Mavis", email "mavis.dracula@gmail.com", username "mavis", cnpj "12.215.333/0001-33", adress "Rua das Sextas, 13", hotel "Hotel Transilvânia" e password "@Vampiresca1" + Given que eu sou um novo hoteleiro + When eu envio uma solicitação de cadastro com o hotel "Hotel Transilvânia", email "mavis.dracula@gmail.com", username "mavis", password "@Vampiresca1", cidade "Transilvânia", cep "12345678", endereço "Rua das Sextas", número do endereço "13", UF "TR" e CNPJ "12.215.333/0001-33" Then o cadastro deve ser realizado com sucesso And eu devo receber uma mensagem de confirmação: """ { "message": "Cadastro realizado com sucesso", - "user": { - "id": #is_placeholder", - "name": "Mavis", + "hotelier": { + "id": "#is_placeholder", + "name": "Maria Letícia", "email": "mavis.dracula@gmail.com", "username": "mavis", "password": "@Vampiresca1", "hotel": "Hotel Transilvânia", - "adress": "Rua das Sextas, 13", + "city": "Transilvânia", + "cep": "12345678", + "address": "Rua das Sextas", + "n_address": "13", + "UF": "TR", "cnpj": "12.215.333/0001-33" } } """ - - Scenario: Cadastro Mal-Sucedido de Usuário Hoteleiro por E-mail já Cadastrado - Given que o email "mavis.dracula@gmail.com" já está cadastrado - When eu envio uma solicitação de cadastro com o nome "Mavis", email "mavis.dracula@gmail.com", username "mavis", cnpj "12.215.333/0001-33", adress "Rua das Sextas, 13", hotel "Hotel Transilvânia" e password "@Vampiresca1" - Then o cadastro não deve ser realizado - And eu devo receber uma mensagem de erro indicando que o e-mail já está em uso: - """ - { - "error": "E-mail ou nome de usuário já existe." - } - """ - - Scenario: Cadastro Mal-Sucedido de Usuário Hoteleiro por Usuário já Cadastrado - Given que o username "mavis" já está cadastrado - When eu envio uma solicitação de cadastro com o nome "Mavis", email "mavis.dracula@gmail.com", username "mavis", cnpj "12.215.333/0001-33", adress "Rua das Sextas, 13", hotel "Hotel Transilvânia" e password "@Vampiresca1" - Then o cadastro não deve ser realizado - And eu devo receber uma mensagem de erro indicando que o nome de usuário já está em uso: - """ - { - "error": "E-mail ou nome de usuário já existe." - } - """ - - Scenario: Cadastro Mal-Sucedido de Usuário Hoteleiro por Senha Inválida - Given que eu sou um novo usuário - When eu envio uma solicitação de cadastro com o nome "Mavis", email "mavis.dracula@gmail.com", username "mavis", cnpj "12.215.333/0001-33", adress "Rua das Sextas, 13", hotel "Hotel Transilvânia" e password "@Va" - Then o cadastro não deve ser realizado - And eu devo receber uma mensagem de erro indicando que a senha é inválida: - """ - { - "error": "A senha deve ter mais de 6 dígitos" - } - """ From e332fc5a04c275367352386a5c4ae63c8c2baa40 Mon Sep 17 00:00:00 2001 From: duartebianca Date: Mon, 1 Jul 2024 20:31:12 -0300 Subject: [PATCH 138/406] fix: typo --- backend/src/services/email.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/services/email.service.ts b/backend/src/services/email.service.ts index e15326e21c..af9a99fb8f 100644 --- a/backend/src/services/email.service.ts +++ b/backend/src/services/email.service.ts @@ -20,7 +20,7 @@ export default class EmailService { }); const mailOptions = { - from: `"Hotel Trancivânia 👻" <${USER_EMAIL}>`, + from: `"Hotel Trancinvânia 👻" <${USER_EMAIL}>`, to: to, subject: subject, html: html, From a21bdc085d1527f0ea4757e897d84c06148ddf5d Mon Sep 17 00:00:00 2001 From: Bianca Duarte <82621326+duartebianca@users.noreply.github.com> Date: Mon, 1 Jul 2024 22:20:45 -0300 Subject: [PATCH 139/406] docs: update back-end information in README.md --- README.md | 61 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 2b8ab2ecf4..e86e416ec3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -logo +logo # Hotel Trancinvânia @@ -8,7 +8,7 @@ Hotel Trancinvânia é um projeto de sistema de gerenciamento de reservas de hot - [Visão Geral](#visão-geral) - [Equipe](#equipe) -- [Tecnologias Utiizadas](#tecnologias) +- [Tecnologias Utiizadas](#tecnologias-utilizadas) - [Estrutura do Projeto](#estrutura-do-projeto) - [Configuração e Instalação](#configuração-e-instalação) - [Comandos Úteis](#comandos-úteis) @@ -18,8 +18,20 @@ Este projeto é um sistema completo de gerenciamento de hotel, permitindo as seg - Cadastro e Login - Usuário Hoteleiro e Cliente - Login com autenticação local e JWT -- . -- . + - Alteração de cadastro, podendo alterar e-mail, username e senha + - Recuperação de senha através de token enviado por e-mail +- Publicar, Gerenciar e Realizar Reservas +- Salvar, Gostar, Compartilhar e Avaliar Reservas +- Busca de Reservas com Filtros +- Cadastro e Manutenção de Métodos de Pagamento +- Cadastro e Manutenção de Promoções +- Disparo de E-mails + +### Tipos de Usuário +#### Cliente +O usuário cliente é aquele que pode realizar, salvar, gostar e compartilhar reservas. Reservas só podem ser avaliadas após ter passado o período de estadia. +#### Hoteleiro +O usuário hoteleiro é aquele que publica e gerencia reservas en seu hotel, podendo cadastrar e gerenciar promoções. ## Equipe As pessoas que compõem a equipe são: @@ -31,24 +43,35 @@ As pessoas que compõem a equipe são: - Thais Neves de Souza (tns2) - Victoria Barbosa Cesar Figueiredo (vbcf) -## Tecnologias +## Tecnologias Utilizadas -Utiliza tecnologias como Node.js, Express, TypeScript, Prisma, Docker, e Cypress para testes end-to-end. +### Back-End +- Node.js, Express e TypeScript +- WSL, Docker, Prisma, PostgreSQL +- Zod +- Passport, JWT e bcrypt -## Estrutura do Projeto +### Front-End +- React e TypeScript + - React Hook Form +- Chakra UI e Aceternity UI + +### Testes +- Jest-Cucumber + +### Outras Ferramentas +- **Gerenciamento de Projetos**: Notion +- **Design**: Figma, Canva e Calligraphr +- **Comunicação**: Discord e WhatsApp +## Estrutura do Projeto Abaixo está a estrutura principal dos diretórios e arquivos do projeto: - **backend**: Contém o código fonte do backend da aplicação. - **docker**: Configurações e dados do Docker. - - **docs**: Documentação do backend. - **prisma**: Configurações e migrações do Prisma. - - **src**: Código fonte do backend, incluindo controladores, serviços, repositórios, etc. + - **src**: Código fonte do backend, incluindo controllers, services, repositories, entitites, enums, middleware, routes, utils, etc. - **tests**: Testes do backend. - **config**: Scripts e configurações adicionais. -- **frontend**: Contém o código fonte do frontend da aplicação. - - **cypress**: Testes end-to-end com Cypress. - - **src**: Código fonte do frontend. - ## Configuração e Instalação ### Pré-requisitos @@ -61,14 +84,14 @@ Abaixo está a estrutura principal dos diretórios e arquivos do projeto: 1. Clone o repositório: ```bash - git clone https://github.com/seu-usuario/hotel-trancinvania.git + git clone https://github.com/duartebianca/hotel-trancinvania.git cd hotel-trancinvania ``` 2. Configure e inicie o backend: ```bash - cd backend + cd backend npm install - docker-compose up + docker compose up npx prisma migrate dev npm run start ``` @@ -77,10 +100,6 @@ O banco de dados é configurado e gerenciado pelo Prisma. Certifique-se de que o ## Comandos Úteis ### Backend -- npm run dev: Inicia o servidor de desenvolvimento. +- npm run start: Inicia o servidor. - npm run test: Executa os testes. - npx prisma migrate dev: Executa migrações de banco de dados. -### Frontend -- npm run dev: Inicia o servidor de desenvolvimento. -- npm run build: Cria a aplicação para produção. -- npm run test: Executa os testes. From f25c2c145522a4b946a05a0ac4e8fabbb2b4d933 Mon Sep 17 00:00:00 2001 From: Maria Leticia Date: Sat, 6 Jul 2024 12:10:44 -0300 Subject: [PATCH 140/406] feat: add new API requests for published reservations --- .../publishedReservation.controller.ts | 65 +++++++++++++++---- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/backend/src/controllers/publishedReservation.controller.ts b/backend/src/controllers/publishedReservation.controller.ts index 2ee479588c..95ce47e44c 100644 --- a/backend/src/controllers/publishedReservation.controller.ts +++ b/backend/src/controllers/publishedReservation.controller.ts @@ -13,17 +13,15 @@ export interface PublishedReservation{ name: string; rooms: number; people: number; - wifi: Boolean; - breakfast: Boolean; - airConditioner: Boolean; - parking: Boolean; - room_service: Boolean; + wifi: boolean; + breakfast: boolean; + airConditioner: boolean; + parking: boolean; + room_service: boolean; price: number; new_price: number; - promotion?: Promotion; - promotionId?: number; - hotelier?: Hotelier; - hotelier_id: number; + promotion_id?: number | null; + hotelier_id: number; } export interface IGetReservationsByFilters{ @@ -41,8 +39,22 @@ const publishedReservationGetDto = z.object({ num_children: z.number(), }) +const publishedReservationDto = z.object({ + name: z.string(), + rooms: z.number().min(1), + people: z.number().min(1), + wifi: z.boolean(), + breakfast: z.boolean(), + airConditioner: z.boolean(), + parking: z.boolean(), + room_service: z.boolean(), + price: z.number(), +}) + export default class PublishedReservationController{ private prefix = '/reservations'; + private prefixReservation = '/hotelier/:hotelier_id/reservations'; + private publishedReservationService: PublishedReservationService; private reservationService: ReservationService; // private hotelierService: Hotelier @@ -55,6 +67,12 @@ export default class PublishedReservationController{ public setupRoutes(router: Router){ // pega todas as reservas router.get(this.prefix, (req, res) => this.getAllPublishedReservations(req, res)); + + router.get(this.prefix + '/:id', (req, res) => this.getPublishedReservationById(req, res)); + router.post(this.prefixReservation, validateData(publishedReservationDto), (req, res) => this.insertPublishedReservation(req, res)); + router.put(this.prefix+ '/:id', validateData(publishedReservationDto), (req, res) => this.updatePublishedReservation(req, res)); + router.delete(this.prefix+ '/:id', (req, res) => this.deletePublishedReservation(req, res)); + // pega todas as reservas com filtros especificos (busca de reservas) router.post(this.prefix, validateData(publishedReservationGetDto), (req, res) => this.getPublishedReservationsByFilters(req, res)); } @@ -63,7 +81,33 @@ export default class PublishedReservationController{ const reservations = await this.publishedReservationService.getAllPublishedReservations(); res.status(200).json(reservations); } - + + private async getPublishedReservationById(req: Request, res: Response){ + const { id } = req.params; + const reservation = await this.publishedReservationService.getPublishedReservationById(+id); + res.status(200).json(reservation); + } + + private async insertPublishedReservation(req: Request, res: Response){ + const { hotelier_id } = req.params; + const { name, rooms, people, wifi, breakfast, airConditioner, parking, room_service, price } = req.body; + const id = await this.publishedReservationService.insertPublishedReservation(+hotelier_id, name, rooms, people, wifi, breakfast, airConditioner, parking, room_service, price); + res.status(201).json({status: 201, message: 'Reserva cadastrada com sucesso'}); + } + + private async updatePublishedReservation(req: Request, res: Response){ + const { id } = req.params; + const { name, rooms, people, wifi, breakfast, airConditioner, parking, room_service, price } = req.body; + await this.publishedReservationService.updatePublishedReservation(+id, name, rooms, people, wifi, breakfast, airConditioner, parking, room_service, price); + res.status(200).json({status: 200, message: 'Reserva atualizada com sucesso'}); + } + + private async deletePublishedReservation(req: Request, res: Response){ + const { id } = req.params; + await this.publishedReservationService.deletePublishedReservation(+id); + res.status(200).json({status: 200, message: 'Reserva deletada com sucesso'}); + } + private async getPublishedReservationsByFilters(req: Request, res: Response) { const {num_rooms, city, num_adults, num_children, checkin, checkout} = req.body; const reservations = await this.publishedReservationService.getReservationsByFilters({num_rooms, city, num_adults, num_children,}); @@ -86,7 +130,6 @@ export default class PublishedReservationController{ } } - let availableReservations = [] as PublishedReservation[]; for(let i = 0; i < reservations.length; i++){ From 9cd99629d953f270a640285c20c02abaa17fa446 Mon Sep 17 00:00:00 2001 From: Maria Leticia Date: Sat, 6 Jul 2024 12:13:13 -0300 Subject: [PATCH 141/406] feat: add CRUD operations for pubished reservations --- .../publishedReservation.repository.ts | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/backend/src/repositories/publishedReservation.repository.ts b/backend/src/repositories/publishedReservation.repository.ts index 1d2700564a..c85adcf217 100644 --- a/backend/src/repositories/publishedReservation.repository.ts +++ b/backend/src/repositories/publishedReservation.repository.ts @@ -1,7 +1,10 @@ -import { PrismaClient, PublishedReservation } from "@prisma/client"; +import { PrismaClient } from "@prisma/client"; + +import { PublishedReservation } from "../controllers/publishedReservation.controller"; import prisma from "../database"; import { HttpNotFoundError } from "../utils/errors/http.error"; -import { IGetReservationsByFilters } from "../controllers/publishedReservation.controller"; +import PublishedReservationController, { IGetReservationsByFilters } from "../controllers/publishedReservation.controller"; +import { Reserve } from "../controllers/reservation.controller"; export default class PublishedReservationRepository { async updatePromotionIdReservation(reservation_id: number, promotion_id: number | null): Promise{ @@ -89,6 +92,34 @@ export default class PublishedReservationRepository { return publishedReservations; } + async getPublishedReservationById(id: number): Promise { + const reservation = await prisma.publishedReservation.findUnique({where: {id: id}}); + return reservation as PublishedReservation; + } + + async insertPublishedReservation(params: PublishedReservation): Promise { + const result = await prisma.publishedReservation.create({data: params}); + return result.id; + } + + async updatePublishedReservationById(id:number, params: PublishedReservation): Promise { + await prisma.publishedReservation.update({where: {id:id}, data: params}); + } + + async deletePublishedReservationById(id:number){ + await prisma.publishedReservation.delete({where:{id:id}}); + } + + async checkNoReservation(publishedReservationId: number): Promise { + const reservations = await prisma.reserve.findMany({where: {publishedReservationId: publishedReservationId}}); + return reservations; + } + + async checkReservationAlreadyExists(hotelier_id: number, name: string): Promise { + const reservation = await prisma.publishedReservation.findFirst({where: {name: name, hotelier_id: hotelier_id}}); + return reservation; + } + async getPublishedReservationsByFilters(params: IGetReservationsByFilters){ const {num_rooms, num_adults, num_children} = params; const reservations = await prisma.publishedReservation.findMany({ From a2885d19a1f73479874475173c522c834ac3f3d0 Mon Sep 17 00:00:00 2001 From: Maria Leticia Date: Sat, 6 Jul 2024 12:15:03 -0300 Subject: [PATCH 142/406] feat: added service methods for published reservations --- .../services/publishedReservation.service.ts | 72 ++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/backend/src/services/publishedReservation.service.ts b/backend/src/services/publishedReservation.service.ts index 65a8939a61..73803b7d91 100644 --- a/backend/src/services/publishedReservation.service.ts +++ b/backend/src/services/publishedReservation.service.ts @@ -1,5 +1,7 @@ -import { IGetReservationsByFilters } from "../controllers/publishedReservation.controller"; +import { IGetReservationsByFilters, PublishedReservation } from "../controllers/publishedReservation.controller"; import PublishedReservationRepository from "../repositories/publishedReservation.repository"; +import ReservationRepository from "../repositories/reservation.repository"; +import { HttpBadRequestError, HttpError, HttpInternalServerError, HttpNotFoundError } from "../utils/errors/http.error"; export default class PublishedReservationService { @@ -10,6 +12,15 @@ export default class PublishedReservationService { this.publishedReservationRepository = new PublishedReservationRepository(); } + private preparePublishedReservationParams(hotelier_id: number, name: string, rooms: number, people: number, wifi: boolean, breakfast: boolean, airConditioner: boolean, parking: boolean, room_service: boolean, price: number, promotion_id?: number | null): PublishedReservation{ + if(promotion_id === undefined){ + promotion_id = null; + } + let new_price = price; + let params = { name, rooms, people, wifi, breakfast, airConditioner, parking, room_service, price, new_price, promotion_id, hotelier_id } as PublishedReservation; + return params; + } + public async getAllPublishedReservations(){ return await this.publishedReservationRepository.getAllPublishedReservations(); } @@ -18,4 +29,63 @@ export default class PublishedReservationService { const matchReservations = await this.publishedReservationRepository.getPublishedReservationsByFilters(params); return matchReservations; } + + public async getPublishedReservationById(id: number): Promise{ + const Reservation = await this.publishedReservationRepository.getPublishedReservationById(id); + return Reservation; + } + + public async insertPublishedReservation(hotelier_id: number, name: string, rooms: number, people: number, wifi:boolean, breakfast:boolean, airConditioner:boolean, parking: boolean, room_service: boolean, price: number):Promise{ + const params = this.preparePublishedReservationParams(hotelier_id, name, rooms, people, wifi, breakfast, airConditioner, parking, room_service, price); + try{ + const reservation = await this.publishedReservationRepository.checkReservationAlreadyExists(hotelier_id, name); + if(reservation){ + throw new HttpBadRequestError({msg: 'Reseva existente!'}) + } + await this.publishedReservationRepository.insertPublishedReservation(params); + }catch(error: any){ + if (error instanceof HttpError){ + throw error; + }else{ + throw new HttpInternalServerError({msg: `Error inserting reservation: ${error.message}`}); + } + } + } + + public async updatePublishedReservation(id:number, name: string, rooms: number, people: number, wifi:boolean, breakfast:boolean, airConditioner:boolean, parking: boolean, room_service: boolean, price: number):Promise{ + try{ + const reservation = await this.publishedReservationRepository.getPublishedReservationById(id); + if(!reservation){ + throw new HttpNotFoundError({msg: 'Reservation not found'}); + } + const params = this.preparePublishedReservationParams(reservation.hotelier_id, name, rooms, people, wifi, breakfast, airConditioner, parking, room_service, price, reservation.promotion_id); + await this.publishedReservationRepository.updatePublishedReservationById(id, params); + }catch(error: any){ + if (error instanceof HttpError){ + throw error; + }else{ + throw new HttpInternalServerError({msg: `Error updating reservation: ${error.message}`}); + } + } + } + + public async deletePublishedReservation(id: number) { + try{ + const reservation = await this.publishedReservationRepository.getPublishedReservationById(id); + if(!reservation){ + throw new HttpNotFoundError({msg: 'Reservation not found'}); + } + const reservations = await this.publishedReservationRepository.checkNoReservation(id); + if(reservations?.length !== 0){ + throw new HttpBadRequestError({msg: 'Esse quartos possui reservas pendentes'}) + } + await this.publishedReservationRepository.deletePublishedReservationById(id); + }catch(error: any){ + if (error instanceof HttpError){ + throw error; + }else{ + throw new HttpInternalServerError({msg: `Error deleting reservation: ${error.message}`}); + } + } + } } \ No newline at end of file From 43d0df4c329cb5acd1ccfc8a8a9fbc9a179f7927 Mon Sep 17 00:00:00 2001 From: Maria Leticia Date: Sat, 6 Jul 2024 12:19:21 -0300 Subject: [PATCH 143/406] refactor: changed HTTP error messages to Portuguese --- backend/src/services/promotion.service.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/backend/src/services/promotion.service.ts b/backend/src/services/promotion.service.ts index b3142649cc..460fe9b2a5 100644 --- a/backend/src/services/promotion.service.ts +++ b/backend/src/services/promotion.service.ts @@ -32,12 +32,18 @@ export default class PromotionService { async insertPromotion( reservation_id: number, discount: number, type: string, num_rooms?: number | null): Promise { let params = this.preparePromotionParams(discount, type, num_rooms); try{ + const reservation = await this.publishedReservationRepository.getPublishedReservationById(reservation_id); const promotion = await this.publishedReservationRepository.getPromotionIdByReservationId(reservation_id); if (promotion) { throw new HttpConflictError({ - msg: 'Promotion already exists' + msg: 'Essa reserva já possui promoção' }); + }else if(num_rooms && reservation.rooms < num_rooms){ + throw new HttpBadRequestError({ + msg: `Há apenas ${reservation.rooms} quartos cadastrados` + }) } + const promotion_id = await this.promotionRepository.insertPromotion(params); await this.publishedReservationRepository.updatePromotionIdReservation(reservation_id, +promotion_id); await this.publishedReservationRepository.updatePriceAllReservations(); @@ -100,12 +106,13 @@ export default class PromotionService { const promotion_id = await this.publishedReservationRepository.getPromotionIdByReservationId(reservation_id) if (!promotion_id) { throw new HttpNotFoundError({ - msg: 'Promotion not found' + msg: 'Não há promoção cadastrada' }); } const rows = await this.publishedReservationRepository.getQuantityOfPromotions(promotion_id); if(rows > 1){ - await this.insertPromotion(reservation_id, params.discount, params.type, params.num_rooms); + const promotion_id = await this.promotionRepository.insertPromotion(params); + await this.publishedReservationRepository.updatePromotionIdReservation(reservation_id, +promotion_id); }else{ await this.promotionRepository.updatePromotionById(promotion_id, params); } @@ -124,7 +131,7 @@ export default class PromotionService { const promotion_id = await this.publishedReservationRepository.getPromotionIdByReservationId(reservation_id); if (!promotion_id) { throw new HttpNotFoundError({ - msg: 'Promotion not found' + msg: 'Não há promoção cadastrada' }); } await this.publishedReservationRepository.updatePromotionIdReservation(reservation_id, null); @@ -146,7 +153,7 @@ export default class PromotionService { try{ if(!await this.publishedReservationRepository.promotionInReservation()){ throw new HttpNotFoundError({ - msg: 'Promotion not found' + msg: 'Nenhuma promoção encontrada' }); } await this.promotionRepository.deleteAllPromotions(); From 0f930a90cc83fc3e9f988e79cf18105fbd49a625 Mon Sep 17 00:00:00 2001 From: duartebianca Date: Sat, 6 Jul 2024 16:07:50 -0300 Subject: [PATCH 144/406] chore: move example module to example folder --- .../app/{home => example}/components/.gitkeep | 0 .../context/HomeContext/index.tsx | 0 .../context/HomeContext/reducer.ts | 0 .../context/HomeContext/service.ts | 0 .../context/HomeContext/types.ts | 0 .../app/{home => example}/forms/TestForm.ts | 0 .../app/{home => example}/models/TestModel.ts | 0 .../pages/CreateTest/index.module.css | 0 .../pages/CreateTest/index.tsx | 0 .../pages/ListTests/index.module.css | 0 .../pages/ListTests/index.tsx | 0 frontend/src/app/home/components/Card.tsx | 35 ------ .../ui/animated-tooltip-preview.tsx | 56 --------- .../home/components/ui/animated-tooltip.tsx | 107 ------------------ frontend/src/index.tsx | 18 --- .../shared/components/Button/index.module.css | 8 -- .../src/shared/components/Button/index.tsx | 14 --- 17 files changed, 238 deletions(-) rename frontend/src/app/{home => example}/components/.gitkeep (100%) rename frontend/src/app/{home => example}/context/HomeContext/index.tsx (100%) rename frontend/src/app/{home => example}/context/HomeContext/reducer.ts (100%) rename frontend/src/app/{home => example}/context/HomeContext/service.ts (100%) rename frontend/src/app/{home => example}/context/HomeContext/types.ts (100%) rename frontend/src/app/{home => example}/forms/TestForm.ts (100%) rename frontend/src/app/{home => example}/models/TestModel.ts (100%) rename frontend/src/app/{home => example}/pages/CreateTest/index.module.css (100%) rename frontend/src/app/{home => example}/pages/CreateTest/index.tsx (100%) rename frontend/src/app/{home => example}/pages/ListTests/index.module.css (100%) rename frontend/src/app/{home => example}/pages/ListTests/index.tsx (100%) delete mode 100644 frontend/src/app/home/components/Card.tsx delete mode 100644 frontend/src/app/home/components/ui/animated-tooltip-preview.tsx delete mode 100644 frontend/src/app/home/components/ui/animated-tooltip.tsx delete mode 100644 frontend/src/index.tsx delete mode 100644 frontend/src/shared/components/Button/index.module.css delete mode 100644 frontend/src/shared/components/Button/index.tsx diff --git a/frontend/src/app/home/components/.gitkeep b/frontend/src/app/example/components/.gitkeep similarity index 100% rename from frontend/src/app/home/components/.gitkeep rename to frontend/src/app/example/components/.gitkeep diff --git a/frontend/src/app/home/context/HomeContext/index.tsx b/frontend/src/app/example/context/HomeContext/index.tsx similarity index 100% rename from frontend/src/app/home/context/HomeContext/index.tsx rename to frontend/src/app/example/context/HomeContext/index.tsx diff --git a/frontend/src/app/home/context/HomeContext/reducer.ts b/frontend/src/app/example/context/HomeContext/reducer.ts similarity index 100% rename from frontend/src/app/home/context/HomeContext/reducer.ts rename to frontend/src/app/example/context/HomeContext/reducer.ts diff --git a/frontend/src/app/home/context/HomeContext/service.ts b/frontend/src/app/example/context/HomeContext/service.ts similarity index 100% rename from frontend/src/app/home/context/HomeContext/service.ts rename to frontend/src/app/example/context/HomeContext/service.ts diff --git a/frontend/src/app/home/context/HomeContext/types.ts b/frontend/src/app/example/context/HomeContext/types.ts similarity index 100% rename from frontend/src/app/home/context/HomeContext/types.ts rename to frontend/src/app/example/context/HomeContext/types.ts diff --git a/frontend/src/app/home/forms/TestForm.ts b/frontend/src/app/example/forms/TestForm.ts similarity index 100% rename from frontend/src/app/home/forms/TestForm.ts rename to frontend/src/app/example/forms/TestForm.ts diff --git a/frontend/src/app/home/models/TestModel.ts b/frontend/src/app/example/models/TestModel.ts similarity index 100% rename from frontend/src/app/home/models/TestModel.ts rename to frontend/src/app/example/models/TestModel.ts diff --git a/frontend/src/app/home/pages/CreateTest/index.module.css b/frontend/src/app/example/pages/CreateTest/index.module.css similarity index 100% rename from frontend/src/app/home/pages/CreateTest/index.module.css rename to frontend/src/app/example/pages/CreateTest/index.module.css diff --git a/frontend/src/app/home/pages/CreateTest/index.tsx b/frontend/src/app/example/pages/CreateTest/index.tsx similarity index 100% rename from frontend/src/app/home/pages/CreateTest/index.tsx rename to frontend/src/app/example/pages/CreateTest/index.tsx diff --git a/frontend/src/app/home/pages/ListTests/index.module.css b/frontend/src/app/example/pages/ListTests/index.module.css similarity index 100% rename from frontend/src/app/home/pages/ListTests/index.module.css rename to frontend/src/app/example/pages/ListTests/index.module.css diff --git a/frontend/src/app/home/pages/ListTests/index.tsx b/frontend/src/app/example/pages/ListTests/index.tsx similarity index 100% rename from frontend/src/app/home/pages/ListTests/index.tsx rename to frontend/src/app/example/pages/ListTests/index.tsx diff --git a/frontend/src/app/home/components/Card.tsx b/frontend/src/app/home/components/Card.tsx deleted file mode 100644 index f5e561bbc9..0000000000 --- a/frontend/src/app/home/components/Card.tsx +++ /dev/null @@ -1,35 +0,0 @@ -// src/components/Card.tsx -import { Box, Heading, Image, Text } from "@chakra-ui/react"; - -interface CardProps { - imageUrl: string; - title: string; - description: string; - imageSize: { width: string; height: string }; // Adicionando a propriedade imageSize -} - -const Card = ({ imageUrl, title, description, imageSize }: CardProps) => { - return ( - - {/* Ajustando a imagem */} - - {title} - - {description} - - ); -}; - -export default Card; diff --git a/frontend/src/app/home/components/ui/animated-tooltip-preview.tsx b/frontend/src/app/home/components/ui/animated-tooltip-preview.tsx deleted file mode 100644 index 28ffe62d95..0000000000 --- a/frontend/src/app/home/components/ui/animated-tooltip-preview.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from "react"; -import { AnimatedTooltip } from "./animated-tooltip"; -import { Box } from "@chakra-ui/react"; - -const people = [ - { - id: 1, - name: "Amanda Cristina", - designation: "Salvar, gostar, compartilhar e avaliar reserva", - image: "https://i.imgur.com/B3GoJFb.png", - }, - { - id: 2, - name: "Bianca Duarte", - designation: "Cadastro, Login e tela Inicial", - image: "https://i.imgur.com/GKQzbwx.png", - }, - { - id: 3, - name: "Maria Letícia", - designation: "Promoções e Disparo de E-mails", - image: "https://i.imgur.com/RwDa0K6.png", - }, - { - id: 4, - name: "Matheus Augusto", - designation: "Métodos de Pagamento", - image: "https://i.imgur.com/2ccf5ry.png", - }, - { - id: 5, - name: "Matheus Galdino", - designation: "Busca com Filtro", - image: "https://i.imgur.com/9KP19I1.png", - }, - { - id: 6, - name: "Thaís Neves", - designation: "Gerenciar e Publicar Reservas", - image: "https://i.imgur.com/j15hgfa.png", - }, - { - id: 7, - name: "Victória Cesar", - designation: "Realizar Reservas", - image: "https://i.imgur.com/N5YaGKi.png", - }, -]; - -export function AnimatedTooltipPreview() { - return ( - - - - ); -} diff --git a/frontend/src/app/home/components/ui/animated-tooltip.tsx b/frontend/src/app/home/components/ui/animated-tooltip.tsx deleted file mode 100644 index c063414b22..0000000000 --- a/frontend/src/app/home/components/ui/animated-tooltip.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import React, { useState } from "react"; -import { - Avatar, - AvatarGroup, - Box, - Text, - Flex, - useColorModeValue, -} from "@chakra-ui/react"; -import { - motion, - useTransform, - AnimatePresence, - useMotionValue, - useSpring, -} from "framer-motion"; - -export const AnimatedTooltip = ({ - items, -}: { - items: { - id: number; - name: string; - designation: string; - image: string; - }[]; -}) => { - const [hoveredIndex, setHoveredIndex] = useState(null); - const springConfig = { stiffness: 100, damping: 5 }; - const x = useMotionValue(0); - const rotate = useSpring(useTransform(x, [-100, 100], [-45, 45]), springConfig); - const translateX = useSpring(useTransform(x, [-100, 100], [-50, 50]), springConfig); - - const handleMouseMove = (event: any) => { - const halfWidth = event.target.offsetWidth / 2; - x.set(event.nativeEvent.offsetX - halfWidth); - }; - - const tooltipBg = useColorModeValue("blackAlpha.700", "whiteAlpha.700"); - const tooltipTextColor = useColorModeValue("white", "black"); - - return ( - - - {items.map((item) => ( - setHoveredIndex(item.id)} - onMouseLeave={() => setHoveredIndex(null)} - > - - {hoveredIndex === item.id && ( - - - {item.name} - {item.designation} - - - )} - - - - - - ))} - - - ); -}; diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx deleted file mode 100644 index d5f5eae0cd..0000000000 --- a/frontend/src/index.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { ChakraProvider, extendTheme } from "@chakra-ui/react"; -import { createRoot } from "react-dom/client"; -import App from "./App"; - -const theme = extendTheme({ - fonts: { - heading: "Inter", - body: "Inter", - }, -}); - -const container = document.getElementById('root'); -const root = createRoot(container!); -root.render( - - - -); diff --git a/frontend/src/shared/components/Button/index.module.css b/frontend/src/shared/components/Button/index.module.css deleted file mode 100644 index 73e412dbee..0000000000 --- a/frontend/src/shared/components/Button/index.module.css +++ /dev/null @@ -1,8 +0,0 @@ -.button { - width: 100%; - padding: 0.5rem; - border: 1px solid #ccc; - border-radius: 5px; - font-size: 1rem; - cursor: pointer; -} diff --git a/frontend/src/shared/components/Button/index.tsx b/frontend/src/shared/components/Button/index.tsx deleted file mode 100644 index b85b776800..0000000000 --- a/frontend/src/shared/components/Button/index.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { ButtonHTMLAttributes } from "react"; -import styles from "./index.module.css"; - -type ButtonPros = ButtonHTMLAttributes; - -const Button = (props: ButtonPros) => { - return ( - - ); -}; - -export default Button; From 09fd5d0a682ee1e05aea93cba88eed42d0f7077d Mon Sep 17 00:00:00 2001 From: duartebianca Date: Sat, 6 Jul 2024 16:08:35 -0300 Subject: [PATCH 145/406] feat: add Chakra UI and Custom Fonts --- frontend/index.html | 1 + frontend/src/App.tsx | 146 ++++----------------- frontend/src/Provider.tsx | 14 +- frontend/src/main.tsx | 2 +- frontend/src/shared/theme/Fonts.tsx | 16 +++ frontend/src/shared/theme/GlobalStyles.tsx | 29 ++++ frontend/src/shared/theme/theme.ts | 11 ++ 7 files changed, 93 insertions(+), 126 deletions(-) create mode 100644 frontend/src/shared/theme/Fonts.tsx create mode 100644 frontend/src/shared/theme/GlobalStyles.tsx create mode 100644 frontend/src/shared/theme/theme.ts diff --git a/frontend/index.html b/frontend/index.html index 7cae5d4dc5..27eb6f2d9f 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -5,6 +5,7 @@ Hotel Trancinvânia +
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index c4b4164581..e4498ba464 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,126 +1,26 @@ -// src/App.tsx -import { Box, Flex, Heading, Image, Input, Button, IconButton, Text, extendTheme, ChakraProvider, Link } from "@chakra-ui/react"; -import "@fontsource/inter"; // Importando a fonte Inter -import "@fontsource/inter/200.css"; // Importando a versão ExtraLight de Inter -import { FaSpider, FaBed, FaUser } from "react-icons/fa"; -import Card from "./app/home/components/Card"; -import { AnimatedTooltipPreview } from "./app/home/components/ui/animated-tooltip-preview"; -import { FaSearch } from "react-icons/fa"; -import { Global } from "@emotion/react"; +import { createBrowserRouter, RouterProvider } from "react-router-dom"; +import { HomePage } from "./app/home/pages/homepage"; -// URLs das imagens dos cards -const iconsUrls = [ - "https://i.imgur.com/FMcfc42.png", - "https://i.imgur.com/6Bo0jpq.png", - "https://i.imgur.com/ikLfv60.png", - "https://i.imgur.com/NXxtrYx.png", -]; -const logoUrl = "https://www.cin.ufpe.br/~imprensa/marcacinpng/TMB"; -const hotelLogoUrl = "https://i.imgur.com/QcX5CZ7.png"; -const draculaUrl = "https://i.imgur.com/RP7qAvr.png"; -const mavisUrl = "https://i.imgur.com/VvUqQfb.png"; - -const theme = extendTheme({ - fonts: { - heading: "Inter", - body: "Inter", +const router = createBrowserRouter([ + { + path: "*", + Component: HomePage, }, -}); - -const App = () => { - return ( - - - - Hotel Transilvânia Logo - - - - Início - - - - Reservas - - - - Perfil - - - - - - Vampire Man - - O melhor gerenciador de hotéis do submundo. - HOTÉIS PARA HUMANOS - - - - - - } mx={2} height="80px" width="80px" /> - - - - Vampire Woman - - - - - - - - - - NOSSO TIME DE DESENVOLVIMENTO - - - - - CIn UFPE Logo - - - - - - ); -}; + /* + { + path: "/login", + Component: Login, + },*/ + /*{ + path: "/register/client", + Component: ClientRegister, + },*/ + /*{ + path: "/register/hotelier", + Component: HotelierRegister, + },*/ +]); -export default App; \ No newline at end of file +export default function App() { + return Loading...

} />; +} diff --git a/frontend/src/Provider.tsx b/frontend/src/Provider.tsx index 925941d38a..15250d8115 100644 --- a/frontend/src/Provider.tsx +++ b/frontend/src/Provider.tsx @@ -1,8 +1,18 @@ import { ReactNode } from "react"; -import { HomeProvider } from "./app/home/context/HomeContext"; +import { HomeProvider } from "./app/example/context/HomeContext"; +import { ChakraProvider } from "@chakra-ui/react"; +import theme from "./shared/theme/theme"; +import { Fonts } from "./shared/theme/Fonts"; +import GlobalStyles from "./shared/theme/GlobalStyles"; const Provider = ({ children }: { children: ReactNode }) => { - return {children}; + return ( + + + + {children} + + ); }; export default Provider; diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index 471f4acdd3..9166808320 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -10,4 +10,4 @@ ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( -); +); \ No newline at end of file diff --git a/frontend/src/shared/theme/Fonts.tsx b/frontend/src/shared/theme/Fonts.tsx new file mode 100644 index 0000000000..8c6b6b61dc --- /dev/null +++ b/frontend/src/shared/theme/Fonts.tsx @@ -0,0 +1,16 @@ +// src/fonts.tsx +import { Global } from "@emotion/react"; + +export const Fonts = () => ( + +); diff --git a/frontend/src/shared/theme/GlobalStyles.tsx b/frontend/src/shared/theme/GlobalStyles.tsx new file mode 100644 index 0000000000..58708af95c --- /dev/null +++ b/frontend/src/shared/theme/GlobalStyles.tsx @@ -0,0 +1,29 @@ +// src/GlobalStyles.tsx +import { Global } from "@emotion/react"; + +const GlobalStyles = () => ( + +); + +export default GlobalStyles; diff --git a/frontend/src/shared/theme/theme.ts b/frontend/src/shared/theme/theme.ts new file mode 100644 index 0000000000..6754f0ad50 --- /dev/null +++ b/frontend/src/shared/theme/theme.ts @@ -0,0 +1,11 @@ +// src/theme.ts +import { extendTheme } from "@chakra-ui/react"; + +const theme = extendTheme({ + fonts: { + // heading: `'MyCustomFont', 'Inter', sans-serif`, + body: `'Inter', sans-serif`, + }, +}); + +export default theme; From e05a46947c6936eb5c10d00fd68c466f512a1f10 Mon Sep 17 00:00:00 2001 From: duartebianca Date: Sat, 6 Jul 2024 16:10:55 -0300 Subject: [PATCH 146/406] feat: create home module --- frontend/src/app/home/components/.gitkeep | 0 .../app/home/context/HomeContext/index.tsx | 54 ++++++++ .../app/home/context/HomeContext/reducer.ts | 21 +++ .../app/home/context/HomeContext/service.ts | 80 +++++++++++ .../src/app/home/context/HomeContext/types.ts | 17 +++ frontend/src/app/home/forms/TestForm.ts | 9 ++ frontend/src/app/home/models/TestModel.ts | 9 ++ .../src/app/home/pages/homepage/index.tsx | 125 ++++++++++++++++++ 8 files changed, 315 insertions(+) create mode 100644 frontend/src/app/home/components/.gitkeep create mode 100644 frontend/src/app/home/context/HomeContext/index.tsx create mode 100644 frontend/src/app/home/context/HomeContext/reducer.ts create mode 100644 frontend/src/app/home/context/HomeContext/service.ts create mode 100644 frontend/src/app/home/context/HomeContext/types.ts create mode 100644 frontend/src/app/home/forms/TestForm.ts create mode 100644 frontend/src/app/home/models/TestModel.ts create mode 100644 frontend/src/app/home/pages/homepage/index.tsx diff --git a/frontend/src/app/home/components/.gitkeep b/frontend/src/app/home/components/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frontend/src/app/home/context/HomeContext/index.tsx b/frontend/src/app/home/context/HomeContext/index.tsx new file mode 100644 index 0000000000..2348edff45 --- /dev/null +++ b/frontend/src/app/home/context/HomeContext/index.tsx @@ -0,0 +1,54 @@ +import { createContext, ReactNode, useReducer, useMemo } from "react"; +import { HomeState } from "./types"; +import HomeService from "./service"; +import homeStateReducer from "./reducer"; +import { ApiService } from "../../../../shared/services/ApiService"; +import RequestStatus from "../../../../shared/types/request-status"; +import usePrevious from "../../../../shared/hooks/usePrevious"; + +interface HomeContextProps { + state: HomeState; + prevState?: HomeState; + service: HomeService; +} + +export const HomeContext = createContext( + {} as HomeContextProps +); + +interface HomeProviderProps { + children: ReactNode; +} + +export const HomeProvider = ({ children }: HomeProviderProps) => { + const [state, dispatch] = useReducer(homeStateReducer, { + createTestRequestStatus: RequestStatus.idle(), + getTestsRequestStatus: RequestStatus.idle(), + }); + + const prevState = usePrevious(state); + + const apiService = useMemo(() => { + return new ApiService({}); + }, []); + const service = useMemo( + () => + new HomeService({ + apiService, + dispatch, + }), + [apiService] + ); + + return ( + + {children} + + ); +}; diff --git a/frontend/src/app/home/context/HomeContext/reducer.ts b/frontend/src/app/home/context/HomeContext/reducer.ts new file mode 100644 index 0000000000..f8a0f6bd2b --- /dev/null +++ b/frontend/src/app/home/context/HomeContext/reducer.ts @@ -0,0 +1,21 @@ +import { HomeState, HomeStateAction } from "./types"; + +const homeStateReducer = (state: HomeState, action: HomeStateAction) => { + switch (action.type) { + case "CHANGE_CREATE_TEST_REQUEST_STATUS": + return { + ...state, + createTestRequestStatus: action.payload, + }; + case "CHANGE_GET_TESTS_REQUEST_STATUS": + return { + ...state, + getTestsRequestStatus: action.payload, + }; + + default: + return state; + } +}; + +export default homeStateReducer; diff --git a/frontend/src/app/home/context/HomeContext/service.ts b/frontend/src/app/home/context/HomeContext/service.ts new file mode 100644 index 0000000000..9ef25130ec --- /dev/null +++ b/frontend/src/app/home/context/HomeContext/service.ts @@ -0,0 +1,80 @@ +import { Dispatch } from "react"; +import { HomeStateAction } from "./types"; +import { ApiService } from "../../../../shared/services/ApiService"; +import RequestStatus from "../../../../shared/types/request-status"; +import { TestFormType } from "../../forms/TestForm"; +import TestModel from "../../models/TestModel"; +import { AppUnknownError } from "../../../../shared/errors/app-error"; + +export default class HomeService { + private apiService: ApiService; + private dispatch: Dispatch; + + constructor({ + apiService, + dispatch, + }: { + apiService: ApiService; + dispatch: Dispatch; + }) { + this.apiService = apiService; + this.dispatch = dispatch; + } + + async createTest(testForm: TestFormType): Promise { + this.dispatch({ + type: "CHANGE_CREATE_TEST_REQUEST_STATUS", + payload: RequestStatus.loading(), + }); + + const result = await this.apiService.post("/tests", testForm); + + result.handle({ + onSuccess: (response) => { + this.dispatch({ + type: "CHANGE_CREATE_TEST_REQUEST_STATUS", + payload: RequestStatus.success(response), + }); + }, + onFailure: (error) => { + this.dispatch({ + type: "CHANGE_CREATE_TEST_REQUEST_STATUS", + payload: RequestStatus.failure(error), + }); + }, + }); + } + + async getTests(): Promise { + try { + this.dispatch({ + type: "CHANGE_GET_TESTS_REQUEST_STATUS", + payload: RequestStatus.loading(), + }); + + const result = await this.apiService.get("/tests"); + + result.handle({ + onSuccess: (response) => { + const tests = response.data.map((test: any) => new TestModel(test)); + + this.dispatch({ + type: "CHANGE_GET_TESTS_REQUEST_STATUS", + payload: RequestStatus.success(tests), + }); + }, + onFailure: (error) => { + this.dispatch({ + type: "CHANGE_GET_TESTS_REQUEST_STATUS", + payload: RequestStatus.failure(error), + }); + }, + }); + } catch (_) { + this.dispatch({ + type: "CHANGE_GET_TESTS_REQUEST_STATUS", + payload: RequestStatus.failure(new AppUnknownError()), + }); + } + } +} diff --git a/frontend/src/app/home/context/HomeContext/types.ts b/frontend/src/app/home/context/HomeContext/types.ts new file mode 100644 index 0000000000..426cb8e2cb --- /dev/null +++ b/frontend/src/app/home/context/HomeContext/types.ts @@ -0,0 +1,17 @@ +import RequestStatus from "../../../../shared/types/request-status"; +import TestModel from "../../models/TestModel"; + +export type HomeStateAction = + | { + type: "CHANGE_CREATE_TEST_REQUEST_STATUS"; + payload: RequestStatus; + } + | { + type: "CHANGE_GET_TESTS_REQUEST_STATUS"; + payload: RequestStatus; + }; + +export interface HomeState { + createTestRequestStatus: RequestStatus; + getTestsRequestStatus: RequestStatus; +} diff --git a/frontend/src/app/home/forms/TestForm.ts b/frontend/src/app/home/forms/TestForm.ts new file mode 100644 index 0000000000..45bf50b2ef --- /dev/null +++ b/frontend/src/app/home/forms/TestForm.ts @@ -0,0 +1,9 @@ +import * as z from "zod"; + +export const TestFormSchema = z.object({ + name: z + .string() + .min(5, { message: "O campo nome deve ter no mínimo 5 caracteres" }), +}); + +export type TestFormType = z.infer; diff --git a/frontend/src/app/home/models/TestModel.ts b/frontend/src/app/home/models/TestModel.ts new file mode 100644 index 0000000000..1de64f9e75 --- /dev/null +++ b/frontend/src/app/home/models/TestModel.ts @@ -0,0 +1,9 @@ +export default class TestModel { + id: string; + name: string; + + constructor(data: TestModel) { + this.id = data.id; + this.name = data.name; + } +} diff --git a/frontend/src/app/home/pages/homepage/index.tsx b/frontend/src/app/home/pages/homepage/index.tsx new file mode 100644 index 0000000000..b490b16a0d --- /dev/null +++ b/frontend/src/app/home/pages/homepage/index.tsx @@ -0,0 +1,125 @@ +// src/App.tsx +import { Box, Flex, Heading, Image, Button, Text } from "@chakra-ui/react"; +import { NavBar } from "../../../../shared/components/nav-bar"; +import { SearchBar } from "../../components/search-bar"; +import { AnimatedTooltipPreview } from "../../components/animated-tooltip-preview"; +import Card from "../../components/ui/card"; +import { FlipWordsTitle } from "../../components/flip-words-title"; + +// URLs das imagens dos cards +const iconsUrls = [ + "https://i.imgur.com/FMcfc42.png", + "https://i.imgur.com/6Bo0jpq.png", + "https://i.imgur.com/ikLfv60.png", + "https://i.imgur.com/NXxtrYx.png", +]; +const logoUrl = "https://www.cin.ufpe.br/~imprensa/marcacinpng/TMB"; +const draculaUrl = "https://i.imgur.com/RP7qAvr.png"; +const mavisUrl = "https://i.imgur.com/VvUqQfb.png"; + +export const HomePage = () => { + return ( + + + + + Drácula + + + O melhor gerenciador de hotéis do submundo. + + + + + + Mavis Drácula + + + + + + + + + + + NOSSO TIME DE DESENVOLVIMENTO + + + + + + CIn UFPE Logo + + + + + + ); +}; From 81e23657cc992cb538fc27a17e9e7b4a6681b4b3 Mon Sep 17 00:00:00 2001 From: duartebianca Date: Sat, 6 Jul 2024 16:13:08 -0300 Subject: [PATCH 147/406] feat(home): add animated tooltip component from aceternity UI using chakra UI --- .../components/animated-tooltip-preview.tsx | 54 +++++++++ .../home/components/ui/animated-tooltip.tsx | 107 ++++++++++++++++++ 2 files changed, 161 insertions(+) create mode 100644 frontend/src/app/home/components/animated-tooltip-preview.tsx create mode 100644 frontend/src/app/home/components/ui/animated-tooltip.tsx diff --git a/frontend/src/app/home/components/animated-tooltip-preview.tsx b/frontend/src/app/home/components/animated-tooltip-preview.tsx new file mode 100644 index 0000000000..b91f0a3e6e --- /dev/null +++ b/frontend/src/app/home/components/animated-tooltip-preview.tsx @@ -0,0 +1,54 @@ +import React from "react"; +import { Box } from "@chakra-ui/react"; +import { AnimatedTooltip } from "./ui/animated-tooltip"; + +const people = [ + { + id: 1, + name: "Amanda Cristina", + designation: "Salvar, gostar, compartilhar e avaliar reserva", + image: "https://i.imgur.com/B3GoJFb.png", + }, + { + id: 2, + name: "Bianca Duarte", + designation: "Cadastro, Login e tela Inicial", + image: "https://i.imgur.com/GKQzbwx.png", + }, + { + id: 3, + name: "Maria Letícia", + designation: "Promoções e Disparo de E-mails", + image: "https://i.imgur.com/RwDa0K6.png", + }, + { + id: 4, + name: "Matheus Augusto", + designation: "Métodos de Pagamento", + image: "https://i.imgur.com/2ccf5ry.png", + }, + { + id: 5, + name: "Matheus Galdino", + designation: "Busca com Filtro", + image: "https://i.imgur.com/9KP19I1.png", + }, + { + id: 6, + name: "Thaís Neves", + designation: "Gerenciar e Publicar Reservas", + image: "https://i.imgur.com/j15hgfa.png", + }, + { + id: 7, + name: "Victória Cesar", + designation: "Realizar Reservas", + image: "https://i.imgur.com/N5YaGKi.png", + }, +]; + +export function AnimatedTooltipPreview() { + return ( + + ); +} diff --git a/frontend/src/app/home/components/ui/animated-tooltip.tsx b/frontend/src/app/home/components/ui/animated-tooltip.tsx new file mode 100644 index 0000000000..53e6b96b9a --- /dev/null +++ b/frontend/src/app/home/components/ui/animated-tooltip.tsx @@ -0,0 +1,107 @@ +import React, { useState } from "react"; +import { + Avatar, + AvatarGroup, + Box, + Text, + Flex, + useColorModeValue, +} from "@chakra-ui/react"; +import { + motion, + useTransform, + AnimatePresence, + useMotionValue, + useSpring, +} from "framer-motion"; + +export const AnimatedTooltip = ({ + items, +}: { + items: { + id: number; + name: string; + designation: string; + image: string; + }[]; +}) => { + const [hoveredIndex, setHoveredIndex] = useState(null); + const springConfig = { stiffness: 100, damping: 5 }; + const x = useMotionValue(0); + const rotate = useSpring(useTransform(x, [-100, 100], [-45, 45]), springConfig); + const translateX = useSpring(useTransform(x, [-100, 100], [-50, 50]), springConfig); + + const handleMouseMove = (event: any) => { + const halfWidth = event.target.offsetWidth / 2; + x.set(event.nativeEvent.offsetX - halfWidth); + }; + + const tooltipBg = useColorModeValue("blackAlpha.700", "whiteAlpha.700"); + const tooltipTextColor = useColorModeValue("white", "black"); + + return ( + + + {items.map((item) => ( + setHoveredIndex(item.id)} + onMouseLeave={() => setHoveredIndex(null)} + > + + {hoveredIndex === item.id && ( + + + {item.name} + {item.designation} + + + )} + + + + + + ))} + + + ); +}; From 79ca2173d9aa8fceea78202ade6cf79d1fd60069 Mon Sep 17 00:00:00 2001 From: duartebianca Date: Sat, 6 Jul 2024 16:14:41 -0300 Subject: [PATCH 148/406] feat(home): add flip words component from aceternity UI using chakra UI --- .../app/home/components/flip-words-title.tsx | 35 ++++++++ .../home/components/ui/flip-words-effect.tsx | 80 +++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 frontend/src/app/home/components/flip-words-title.tsx create mode 100644 frontend/src/app/home/components/ui/flip-words-effect.tsx diff --git a/frontend/src/app/home/components/flip-words-title.tsx b/frontend/src/app/home/components/flip-words-title.tsx new file mode 100644 index 0000000000..1bb449e736 --- /dev/null +++ b/frontend/src/app/home/components/flip-words-title.tsx @@ -0,0 +1,35 @@ +// src/components/ui/flip-words-title.tsx +import React from "react"; +import { Box, Heading, useColorModeValue } from "@chakra-ui/react"; +import { FlipWords } from "./ui/flip-words-effect"; + +export function FlipWordsTitle() { + const words = ["HUMANOS", "FANTASMAS", "VAMPIROS", "ZUMBIS"]; + const textColor = useColorModeValue("gray.600", "gray.400"); + + return ( + + + HOTÉIS PArA{" "} + + + + + + ); +} diff --git a/frontend/src/app/home/components/ui/flip-words-effect.tsx b/frontend/src/app/home/components/ui/flip-words-effect.tsx new file mode 100644 index 0000000000..953768165a --- /dev/null +++ b/frontend/src/app/home/components/ui/flip-words-effect.tsx @@ -0,0 +1,80 @@ +import React, { useCallback, useEffect, useState } from "react"; +import { AnimatePresence, motion } from "framer-motion"; +import { Text } from "@chakra-ui/react"; + +export const FlipWords = ({ + words, + duration = 1000, + className, +}: { + words: string[]; + duration?: number; + className?: string; +}) => { + const [currentWord, setCurrentWord] = useState(words[0]); + const [isAnimating, setIsAnimating] = useState(false); + + const startAnimation = useCallback(() => { + const word = words[words.indexOf(currentWord) + 1] || words[0]; + setCurrentWord(word); + setIsAnimating(true); + }, [currentWord, words]); + + useEffect(() => { + if (!isAnimating) + setTimeout(() => { + startAnimation(); + }, duration); + }, [isAnimating, duration, startAnimation]); + + return ( + { + setIsAnimating(false); + }} + > + + {currentWord.split("").map((letter, index) => ( + + {letter} + + ))} + + + ); +}; From 00cc3e34ec5c70c508bbf52ce12189eee9be0586 Mon Sep 17 00:00:00 2001 From: duartebianca Date: Sat, 6 Jul 2024 16:15:08 -0300 Subject: [PATCH 149/406] feat(home): add card component --- frontend/src/app/home/components/ui/card.tsx | 35 ++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 frontend/src/app/home/components/ui/card.tsx diff --git a/frontend/src/app/home/components/ui/card.tsx b/frontend/src/app/home/components/ui/card.tsx new file mode 100644 index 0000000000..f5e561bbc9 --- /dev/null +++ b/frontend/src/app/home/components/ui/card.tsx @@ -0,0 +1,35 @@ +// src/components/Card.tsx +import { Box, Heading, Image, Text } from "@chakra-ui/react"; + +interface CardProps { + imageUrl: string; + title: string; + description: string; + imageSize: { width: string; height: string }; // Adicionando a propriedade imageSize +} + +const Card = ({ imageUrl, title, description, imageSize }: CardProps) => { + return ( + + {/* Ajustando a imagem */} + + {title} + + {description} + + ); +}; + +export default Card; From acf5db202124857a900278e62f5c95977e3d8d72 Mon Sep 17 00:00:00 2001 From: duartebianca Date: Sat, 6 Jul 2024 16:15:39 -0300 Subject: [PATCH 150/406] feat (home): add search bar component --- .../src/app/home/components/search-bar.tsx | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 frontend/src/app/home/components/search-bar.tsx diff --git a/frontend/src/app/home/components/search-bar.tsx b/frontend/src/app/home/components/search-bar.tsx new file mode 100644 index 0000000000..e3e41ffc33 --- /dev/null +++ b/frontend/src/app/home/components/search-bar.tsx @@ -0,0 +1,46 @@ +import { Flex, IconButton, Input } from "@chakra-ui/react"; +import { FaSearch } from "react-icons/fa"; + +export const SearchBar = () => { + return ( + + + + + + } + mx={2} + height="80px" + width="80px" + /> + + ); +}; From 09c18bf27caeab0771389ef8822cb3bf8c70b9c0 Mon Sep 17 00:00:00 2001 From: duartebianca Date: Sat, 6 Jul 2024 16:16:03 -0300 Subject: [PATCH 151/406] feat(home): add nav bar shared component --- frontend/src/shared/components/nav-bar.tsx | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 frontend/src/shared/components/nav-bar.tsx diff --git a/frontend/src/shared/components/nav-bar.tsx b/frontend/src/shared/components/nav-bar.tsx new file mode 100644 index 0000000000..f6ea9a6cc1 --- /dev/null +++ b/frontend/src/shared/components/nav-bar.tsx @@ -0,0 +1,28 @@ +import { Box, Flex, Image, Text, Link } from "@chakra-ui/react"; +import { FaSpider, FaBed, FaUser } from "react-icons/fa"; +const hotelLogoUrl = "https://i.imgur.com/QcX5CZ7.png"; + +export const NavBar: React.FC = () => { + return ( + + + Hotel Transilvânia Logo + + + + Início + + + + Reservas + + + + Perfil + + + + + + ) +}; \ No newline at end of file From 2eefc052b538e095f23f18fb10015b379115cdf2 Mon Sep 17 00:00:00 2001 From: duartebianca Date: Sat, 6 Jul 2024 16:32:14 -0300 Subject: [PATCH 152/406] fix(home): adapt navbar size --- frontend/src/shared/components/nav-bar.tsx | 72 +++++++++++++++------- 1 file changed, 49 insertions(+), 23 deletions(-) diff --git a/frontend/src/shared/components/nav-bar.tsx b/frontend/src/shared/components/nav-bar.tsx index f6ea9a6cc1..7c6e29b48f 100644 --- a/frontend/src/shared/components/nav-bar.tsx +++ b/frontend/src/shared/components/nav-bar.tsx @@ -3,26 +3,52 @@ import { FaSpider, FaBed, FaUser } from "react-icons/fa"; const hotelLogoUrl = "https://i.imgur.com/QcX5CZ7.png"; export const NavBar: React.FC = () => { - return ( - - - Hotel Transilvânia Logo - - - - Início - - - - Reservas - - - - Perfil - - - - - - ) -}; \ No newline at end of file + return ( + + + Hotel Transilvânia Logo + + + + Início + + + + Reservas + + + + Perfil + + + + + ); +}; From bf24f95472d0565440c47e3c09ba0b6819bd2da4 Mon Sep 17 00:00:00 2001 From: Maria Leticia Date: Sun, 7 Jul 2024 12:01:10 -0300 Subject: [PATCH 153/406] feat: Update promotion scenario message --- backend/tests/features/promotions.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/tests/features/promotions.feature b/backend/tests/features/promotions.feature index 9b25560c4f..a8ebe3072a 100644 --- a/backend/tests/features/promotions.feature +++ b/backend/tests/features/promotions.feature @@ -54,4 +54,4 @@ Scenario: Deletar todas as promoções com nenhuma promoção cadastrada And não há nenhum quarto com promoção cadastrada When uma requisição DELETE é enviada para "/reservation/promotions" And o status da resposta deve ser "404" - And é retornada a mensagem "Promotion not found" \ No newline at end of file + And é retornada a mensagem "Nenhuma promoção encontrada" \ No newline at end of file From 98afba79f900a353c23abf79666d46a36d988745 Mon Sep 17 00:00:00 2001 From: Maria Leticia Date: Sun, 7 Jul 2024 12:04:29 -0300 Subject: [PATCH 154/406] feat: implement Promotion component with Toastify and Chakra UI --- .../src/app/home/pages/Promotion/aranha.png | Bin 0 -> 19411 bytes .../src/app/home/pages/Promotion/index.tsx | 197 ++++++++++++++++++ .../src/app/home/pages/Promotion/logo.png | Bin 0 -> 130882 bytes .../src/app/home/pages/Promotion/teia.png | Bin 0 -> 45966 bytes 4 files changed, 197 insertions(+) create mode 100644 frontend/src/app/home/pages/Promotion/aranha.png create mode 100644 frontend/src/app/home/pages/Promotion/index.tsx create mode 100644 frontend/src/app/home/pages/Promotion/logo.png create mode 100644 frontend/src/app/home/pages/Promotion/teia.png diff --git a/frontend/src/app/home/pages/Promotion/aranha.png b/frontend/src/app/home/pages/Promotion/aranha.png new file mode 100644 index 0000000000000000000000000000000000000000..304d1e60c87354bd00a2cffeaa55eff5d76e9478 GIT binary patch literal 19411 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 DMWF@1 literal 0 HcmV?d00001 diff --git a/frontend/src/app/home/pages/Promotion/index.tsx b/frontend/src/app/home/pages/Promotion/index.tsx new file mode 100644 index 0000000000..590e9745b9 --- /dev/null +++ b/frontend/src/app/home/pages/Promotion/index.tsx @@ -0,0 +1,197 @@ +import { useEffect, useState } from 'react'; +import { ToastContainer, toast } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; +import { + FormControl, + FormLabel, + Button, + Flex, + Select, + Text, + Box, +} from '@chakra-ui/react'; +import { ArrowBackIcon, CheckIcon } from '@chakra-ui/icons'; +import logoImg from './logo.png'; +import aranhaImg from './aranha.png'; +import teiaImg from './teia.png'; +import { useLocation, useNavigate, useParams } from 'react-router-dom'; +import APIService from '../../../APIService'; +import { PromotionType } from '../../../APIService'; +import { LabelComponent } from '../PublishedReservation/Register'; + +export const Promotion = () => { + const { reservation_id } = useParams(); + const [reservationData, setReservationData] = useState([]); + const [promoType, setPromoType] = useState(''); + const [discount, setDiscount] = useState(''); + const [numRooms, setNumRooms] = useState(''); + const [actionType, setActionType] = useState(''); + + const navigate = useNavigate(); + const api = new APIService(); + const location = useLocation(); + + useEffect(() => { + const params = new URLSearchParams(location.search); + const action = params.get('action') ?? ''; + setActionType(action); + + const fetchReservationData = async () => { + if(reservation_id){ + try { + const response = await api.getPublishedReservationById(+reservation_id); + setReservationData(response.data); + } catch (error) { + console.error('Erro ao obter os dados da reserva:', error); + } + } + }; + fetchReservationData(); + },[location, reservation_id]); + + const handlePromoTypeChange = (event) => { + setPromoType(event.target.value); + }; + + const handleDiscountChange = (event) => { + setDiscount(event.target.value); + }; + + const handleNumRoomsChange = (event) => { + setNumRooms(event.target.value); + }; + + const handleConfirmRegister = async() => { + if(discount === '' || promoType === undefined){ + toast.warning('Preencha todos os campos!'); + }else if(promoType === 'limiteQuarto' && numRooms === ''){ + toast.warning('Preencha todos os campos!'); + } + else if(+discount < 5 || +discount > 60) { + toast.warning('O desconto deve estar entre 5% e 60%'); + }else{ + try{ + if(reservation_id){ + if (actionType === 'createSingle') { + if(promoType === 'ilimitada'){ + await api.createPromotion(+reservation_id, parseInt(discount, 10), PromotionType.ILIMITADA); + }else{ + await api.createPromotion(+reservation_id, parseInt(discount, 10), PromotionType.LIMITE_QUARTO, parseInt(numRooms, 10)); + } + toast.success('Promoção cadastrada com sucesso!'); + }else if (actionType === 'update') { + if(promoType === 'ilimitada'){ + await api.updatePromotion(+reservation_id, parseInt(discount, 10), PromotionType.ILIMITADA); + }else{ + await api.updatePromotion(+reservation_id, parseInt(discount, 10), PromotionType.LIMITE_QUARTO, parseInt(numRooms, 10)); + } + toast.success('Promoção atualizada com sucesso!'); + } + }else{ + if (actionType === 'createAll') { + if(promoType === 'ilimitada'){ + await api.createPromotionAll(parseInt(discount, 10), PromotionType.ILIMITADA); + }else{ + await api.createPromotionAll(parseInt(discount, 10), PromotionType.LIMITE_QUARTO, parseInt(numRooms, 10)); + } + toast.success('Promoção cadastrada com sucesso!'); + } + } + setTimeout(() => { + navigate('/publishedReservationList'); + }, 3000); + }catch(error){ + const err = error as { response: { data: { message: string } } }; + toast.error(`${err.response.data.message}`); + } + } + } + + const handleComeBack = () => { + if(actionType === 'createAll'){ + navigate('/publishedReservationList'); + }else{ + navigate(`/publishedReservationDetails/${reservation_id}`); + } + } + + const handlePriceChange = () => { + const new_price = +reservationData.price * ((1 - (+discount)/100)); + return new_price.toFixed(2); + } + + const price = +reservationData.price; + + return ( + +
+ + + + Dados da Promoção + + + + + Promoção + + + {promoType === 'limiteQuarto' && ( + + )} + {reservation_id && ( + + Valor + + R$ {price.toFixed(2)} + + R$ {handlePriceChange()} + + + )} + + + + + + + + +