diff --git a/.eslintrc.js b/.eslintrc.js index c7505c2..43f48e99 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,33 +1,38 @@ module.exports = { + parser: "@typescript-eslint/parser", settings: { react: { version: "detect", }, }, - parserOptions: { - ecmaVersion: 13, - sourceType: "module", - ecmaFeatures: { - modules: true, - }, - }, env: { browser: true, - es2021: true, + node: true, + es2024: true, "cypress/globals": true, }, extends: [ + "next/core-web-vitals", + "plugin:import/recommended", + "plugin:import/typescript", "eslint:recommended", "plugin:cypress/recommended", "plugin:jsx-a11y/recommended", "plugin:promise/recommended", "plugin:unicorn/all", - "next/core-web-vitals", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", "prettier", ], - plugins: ["cypress"], + plugins: ["cypress", "eslint-plugin-no-relative-import-paths"], ignorePatterns: ["cypress/support", "cypress/plugins"], rules: { + "no-relative-import-paths/no-relative-import-paths": [ + "error", + { + rootDir: "src", + }, + ], "unicorn/consistent-function-scoping": [ "error", { @@ -55,5 +60,26 @@ module.exports = { }, ], "unicorn/no-null": "off", + + /** @see https://medium.com/weekly-webtips/how-to-sort-imports-like-a-pro-in-typescript-4ee8afd7258a */ + "import/order": [ + "error", + { + groups: [ + "builtin", + "external", + "internal", + ["sibling", "parent"], + "index", + "unknown", + ], + "newlines-between": "always", + alphabetize: { + order: "asc", + caseInsensitive: true, + }, + }, + ], + /** */ }, }; diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b7fa0b5..529d6ef 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,7 +13,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: - node-version: "14" + node-version: "18" cache: "yarn" - name: Install dependencies run: yarn install --frozen-lockfile diff --git a/.husky/.gitignore b/.husky/.gitignore new file mode 100644 index 0000000..31354ec --- /dev/null +++ b/.husky/.gitignore @@ -0,0 +1 @@ +_ diff --git a/.husky/commit-msg b/.husky/commit-msg index fa859b0..f2b8821 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1,4 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" -npx --no -- commitlint --edit "" +yarn commitlint --edit "$1" diff --git a/.husky/post-merge b/.husky/post-merge new file mode 100755 index 0000000..b923738 --- /dev/null +++ b/.husky/post-merge @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +yarn install diff --git a/.husky/pre-commit b/.husky/pre-commit index 35d6918..8dd34d2 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/bin/sh . "$(dirname "$0")/_/husky.sh" -npx pretty-quick --staged +yarn prettier:check && yarn lint diff --git a/commitlint.config.js b/commitlint.config.js index 5073c20..69b4242 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1 +1,3 @@ -module.exports = { extends: ["@commitlint/config-conventional"] }; +module.exports = { + extends: ["@commitlint/config-conventional"], +}; diff --git a/cypress/e2e/branch-select.spec.js b/cypress/e2e/branch-select.spec.js index 010c9f7..7771872 100644 --- a/cypress/e2e/branch-select.spec.js +++ b/cypress/e2e/branch-select.spec.js @@ -12,29 +12,31 @@ describe("Info pages", () => { it("can select a branch", () => { cy.getBySel("branchSelect").click(); cy.getBySel("branchOption").should("have.length", 4); + // eslint-disable-next-line cypress/unsafe-to-chain-command cy.getBySel("branchOption") .eq(0) .click() .should(() => { expect(localStorage.getItem("bl-current-branch-id")).to.eq( - "60074e293309ff001a51b244" + "60074e293309ff001a51b244", ); }); cy.visit("/"); cy.getBySel("branchSelect").should(() => { expect(localStorage.getItem("bl-current-branch-id")).to.eq( - "60074e293309ff001a51b244" + "60074e293309ff001a51b244", ); }); cy.getBySel("branchSelect").click(); + // eslint-disable-next-line cypress/unsafe-to-chain-command cy.getBySel("branchOption") .eq(1) .click() .should(() => { expect(localStorage.getItem("bl-current-branch-id")).to.eq( - "5dfa263e8eeee5001c83eacf" + "5dfa263e8eeee5001c83eacf", ); }); }); diff --git a/cypress/e2e/forgot.spec.js b/cypress/e2e/forgot.spec.js index c3acc4a..eb3b4d6 100644 --- a/cypress/e2e/forgot.spec.js +++ b/cypress/e2e/forgot.spec.js @@ -27,7 +27,7 @@ describe("Forgot password", () => { cy.getBySel("email-field").type("petter@"); cy.getBySel("error-message").should( "contain", - "Du må fylle inn en gyldig epost" + "Du må fylle inn en gyldig epost", ); cy.getBySel("forgot-submit").should("be.disabled"); diff --git a/cypress/e2e/info.spec.js b/cypress/e2e/info.spec.js index 1bc8107..cf005f6 100644 --- a/cypress/e2e/info.spec.js +++ b/cypress/e2e/info.spec.js @@ -21,7 +21,7 @@ describe("Info pages", () => { .eq(0) .should( "contain.text", - "Hva betyr det at Boklisten alltid leverer riktig bok?" + "Hva betyr det at Boklisten alltid leverer riktig bok?", ); cy.getBySel("qna-entry-answer").eq(0).should("not.be.visible"); cy.getBySel("qna-entry").eq(0).click(); diff --git a/cypress/e2e/login.spec.js b/cypress/e2e/login.spec.js index 9c2e2d7..4ec07b5 100644 --- a/cypress/e2e/login.spec.js +++ b/cypress/e2e/login.spec.js @@ -38,7 +38,7 @@ describe("Login", () => { cy.getBySel("email-field").type("petter@"); cy.getBySel("error-message").should( "contain", - "Du må fylle inn en gyldig epost" + "Du må fylle inn en gyldig epost", ); cy.getBySel("login-submit").should("be.disabled"); @@ -55,7 +55,7 @@ describe("Login", () => { cy.getBySel("password-field").type("password"); cy.getBySel("error-message").should("not.exist"); cy.getBySel("login-submit").should("not.be.disabled"); - } + }, ); it("displays an error message when username and password is wrong", () => { @@ -68,14 +68,14 @@ describe("Login", () => { cy.wait("@login").its("response.statusCode").should("eq", 401); cy.getBySel("api-error").should( "contain", - "Error: username or password is wrong" + "Error: username or password is wrong", ); }); it("can log in with registered user", () => { cy.login( "richard.stallman@protonmail.com", - "Programming is not a science. Programming is a craft." + "Programming is not a science. Programming is a craft.", ); cy.url().should("not.include", "login"); cy.getBySel("MenuIcon").click(); diff --git a/cypress/e2e/register.spec.js b/cypress/e2e/register.spec.js index c69ec84..771c6ac 100644 --- a/cypress/e2e/register.spec.js +++ b/cypress/e2e/register.spec.js @@ -47,7 +47,7 @@ describe("Register", () => { it("correctly validates a regular user", () => { cy.getBySel("email-field").type("richard.stallman@protonmail.com"); cy.getBySel("password-field").type( - "Programming is not a science. Programming is a craft." + "Programming is not a science. Programming is a craft.", ); cy.getBySel("first-name-field").type("Richard"); cy.getBySel("last-name-field").type("Stallman"); @@ -64,7 +64,7 @@ describe("Register", () => { it("correctly validates an underage user", () => { cy.getBySel("email-field").type("richard.stallman@protonmail.com"); cy.getBySel("password-field").type( - "Programming is not a science. Programming is a craft." + "Programming is not a science. Programming is a craft.", ); cy.getBySel("birthday-field").clear(); @@ -80,7 +80,7 @@ describe("Register", () => { it("correctly displays postal city", () => { cy.getBySel("email-field").type("richard.stallman@protonmail.com"); cy.getBySel("password-field").type( - "Programming is not a science. Programming is a craft." + "Programming is not a science. Programming is a craft.", ); cy.getBySel("postal-code-field").clear(); cy.getBySel("postal-code-field").type("7032"); @@ -91,10 +91,11 @@ describe("Register", () => { cy.getBySel("submit-button").should("be.disabled"); cy.getBySel("error-message").should( "contain", - "Du må oppgi et gyldig norsk postnummer" + "Du må oppgi et gyldig norsk postnummer", ); cy.get("#postalCode").clear(); + // eslint-disable-next-line cypress/unsafe-to-chain-command cy.get("#postalCode").type("0977").blur(); cy.getBySel("postal-city-preview").should("contain", "Oslo"); cy.getBySel("submit-button").should("not.be.disabled"); @@ -116,7 +117,7 @@ describe("Register", () => { cy.getBySel("email-field").type("richard.stallman@protonmail.com"); cy.getBySel("password-field").type( - "Programming is not a science. Programming is a craft." + "Programming is not a science. Programming is a craft.", ); cy.getBySel("first-name-field").type("Richard"); cy.getBySel("last-name-field").type("Stallman"); @@ -144,6 +145,7 @@ describe("Register", () => { it("cannot register when passord is invalid", () => { cy.get("#password").clear(); + // eslint-disable-next-line cypress/unsafe-to-chain-command cy.get("#password").type("pass").blur(); cy.getBySel("error-message").should("be.visible"); cy.getBySel("submit-button").should("be.disabled"); diff --git a/package.json b/package.json index f86a936..562d845 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "serve": "next start", "prettier": "prettier --write '**/*.{js,ts,tsx,md,json,yml,css}' --ignore-path=.gitignore", "prettier:check": "prettier --check '**/*.{js,ts,tsx,md,json,yml,css}' --ignore-path=.gitignore", - "lint": "next lint --ignore-path=.gitignore" + "lint": "next lint --ignore-path=.gitignore", + "prepare": "husky install" }, "dependencies": { "@date-io/moment": "^2.16.1", @@ -47,8 +48,8 @@ }, "devDependencies": { "@boklisten/bl-model": "^0.25.16", - "@commitlint/cli": "^17.4.2", - "@commitlint/config-conventional": "^17.4.2", + "@commitlint/cli": "^17.7.1", + "@commitlint/config-conventional": "^17.7.0", "@testing-library/react": "^13.4.0", "@types/draft-js": "^0.11.10", "@types/node": "18.11.18", @@ -57,21 +58,30 @@ "@types/react-redux": "^7.1.25", "@types/string-similarity": "^4.0.0", "@types/validator": "^13.7.10", + "@typescript-eslint/eslint-plugin": "^6.6.0", + "@typescript-eslint/parser": "^6.6.0", "cypress": "^12.3.0", - "eslint": "8.31.0", - "eslint-config-next": "13.1.2", - "eslint-config-prettier": "^8.6.0", - "eslint-plugin-cypress": "^2.12.1", + "eslint": "8.48.0", + "eslint-config-next": "13.4.19", + "eslint-config-prettier": "^9.0.0", + "eslint-import-resolver-typescript": "^3.6.0", + "eslint-plugin-cypress": "^2.14.0", + "eslint-plugin-import": "^2.28.1", "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-no-relative-import-paths": "^1.5.2", "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-unicorn": "^45.0.2", - "husky": "^8.0.3", - "prettier": "^2.8.2", + "eslint-plugin-unicorn": "^48.0.1", + "husky": ">=6", + "lint-staged": ">=10", + "prettier": "^3.0.3", "pretty-quick": "^3.1.3", "typescript": "^4.9.4" }, "browserslist": [ "defaults", "not IE 11" - ] + ], + "lint-staged": { + "*.{js,ts,tsx,md,json,yml,css}": "yarn prettier:check" + } } diff --git a/src/api/api.ts b/src/api/api.ts index 759f245..37f431a 100644 --- a/src/api/api.ts +++ b/src/api/api.ts @@ -1,11 +1,13 @@ import axios, { AxiosError, AxiosResponse } from "axios"; -import { apiPath, getHeaders } from "./apiRequest"; -import { fetchNewTokens } from "./token"; +import { apiPath, getHeaders } from "api/apiRequest"; +import { fetchNewTokens } from "api/token"; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any export const get = async ( url: string, query?: string, - noRetryTokens?: boolean + noRetryTokens?: boolean, ): Promise> => { if (!url || url.length === 0) { throw new Error("url is undefined"); @@ -46,7 +48,7 @@ export const add = async (collection: string, data: unknown) => { export const addWithEndpoint = async ( collection: string, endpoint: string, - data: unknown + data: unknown, ) => { return await axios .post(`${apiPath(collection)}/${endpoint}`, data, { @@ -68,6 +70,7 @@ export class NotFoundError extends Error { } } +// eslint-disable-next-line @typescript-eslint/no-explicit-any export const apiFetcher = async (url: string): Promise => { try { return await get<{ data: T }>(url).then((response) => response.data.data); diff --git a/src/api/apiRequest.ts b/src/api/apiRequest.ts index c03f55c..b285025 100644 --- a/src/api/apiRequest.ts +++ b/src/api/apiRequest.ts @@ -1,5 +1,5 @@ -import BL_CONFIG from "../utils/bl-config"; -import { getAccessToken, haveAccessToken } from "./token"; +import { getAccessToken, haveAccessToken } from "api/token"; +import BL_CONFIG from "utils/bl-config"; export const apiPath = (collection: string, query?: string) => { const path = BL_CONFIG.api.basePath; diff --git a/src/api/auth.ts b/src/api/auth.ts index 66356b6..f609eee 100644 --- a/src/api/auth.ts +++ b/src/api/auth.ts @@ -1,5 +1,5 @@ +import { haveAccessToken, removeTokens, getAccessTokenBody } from "api/token"; import { UserPermission } from "utils/types"; -import { haveAccessToken, removeTokens, getAccessTokenBody } from "./token"; export const isLoggedIn = () => haveAccessToken(); diff --git a/src/api/login.ts b/src/api/login.ts index 4f2562e..7597947 100644 --- a/src/api/login.ts +++ b/src/api/login.ts @@ -1,6 +1,6 @@ -import { add } from "./api"; -import BL_CONFIG from "../utils/bl-config"; -import { parseTokensFromResponseDataAndStore } from "./token"; +import { add } from "api/api"; +import { parseTokensFromResponseDataAndStore } from "api/token"; +import BL_CONFIG from "utils/bl-config"; export const login = async (username: string, password: string) => { const apiResponse = await add(BL_CONFIG.login.local.url, { diff --git a/src/api/requests.ts b/src/api/requests.ts index 7d6710a..88b8ba8 100644 --- a/src/api/requests.ts +++ b/src/api/requests.ts @@ -16,6 +16,7 @@ export const fetchData = async (url: string, method: string, data: unknown) => { } }; +// eslint-disable-next-line @typescript-eslint/no-explicit-any export const fetcher = async (url: string) => { try { return await axios diff --git a/src/api/token.ts b/src/api/token.ts index df596bf..69b90f0 100644 --- a/src/api/token.ts +++ b/src/api/token.ts @@ -1,8 +1,9 @@ -import { add, get, remove } from "./storage"; -import BL_CONFIG from "../utils/bl-config"; +import axios from "axios"; import { decodeToken } from "react-jwt"; + +import { add, get, remove } from "api/storage"; +import BL_CONFIG from "utils/bl-config"; import { AccessToken } from "utils/types"; -import axios from "axios"; const accessTokenName = BL_CONFIG.token.accessToken; const refreshTokenName = BL_CONFIG.token.refreshToken; @@ -78,7 +79,8 @@ export const getAccessTokenBody = (): AccessToken => { }; export const parseTokensFromResponseDataAndStore = ( - responseData: any + // eslint-disable-next-line @typescript-eslint/no-explicit-any + responseData: any, ): boolean => { let refreshToken = ""; let accessToken = ""; diff --git a/src/components/BranchSelect.tsx b/src/components/BranchSelect.tsx index 47afb7c..65e2431 100644 --- a/src/components/BranchSelect.tsx +++ b/src/components/BranchSelect.tsx @@ -1,3 +1,4 @@ +import { Branch } from "@boklisten/bl-model"; import { Box, FormControl, @@ -6,18 +7,18 @@ import { Select, SelectChangeEvent, } from "@mui/material"; -import { fetcher } from "api/requests"; +import { useRouter } from "next/router"; import { useEffect } from "react"; import useSWR, { SWRResponse } from "swr"; -import BL_CONFIG from "utils/bl-config"; -import { Branch } from "@boklisten/bl-model"; + +import { fetcher } from "api/requests"; import { add, get } from "api/storage"; -import { selectBranch, setSelectedBranch } from "redux/selectedBranch"; +import { setCart, setDeliveryMethod } from "redux/cart"; import { useAppSelector, useAppDispatch } from "redux/hooks"; -import { useRouter } from "next/router"; -import { setCart, setDeliveryMethod } from "../redux/cart"; -import { setSelectedSubjects } from "../redux/selectedSubjects"; -import { setSelectedCustomerItemActions } from "../redux/selectedCustomerItemActions"; +import { selectBranch, setSelectedBranch } from "redux/selectedBranch"; +import { setSelectedCustomerItemActions } from "redux/selectedCustomerItemActions"; +import { setSelectedSubjects } from "redux/selectedSubjects"; +import BL_CONFIG from "utils/bl-config"; export const branchListUrl = `${BL_CONFIG.api.basePath}branches?og=name&active=true&sort=name`; diff --git a/src/components/CustomerItemOverview.tsx b/src/components/CustomerItemOverview.tsx index 43e4fab..50c88d4 100644 --- a/src/components/CustomerItemOverview.tsx +++ b/src/components/CustomerItemOverview.tsx @@ -1,3 +1,6 @@ +import { Branch, CustomerItem, Item } from "@boklisten/bl-model"; +import HelpOutlineIcon from "@mui/icons-material/HelpOutline"; +import { LoadingButton } from "@mui/lab"; import { Alert, ButtonGroup, @@ -11,25 +14,23 @@ import { Tooltip, Typography, } from "@mui/material"; -import React, { useState } from "react"; -import { Branch, CustomerItem, Item } from "@boklisten/bl-model"; -import moment from "moment"; import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; -import HelpOutlineIcon from "@mui/icons-material/HelpOutline"; +import moment from "moment"; +import { useRouter } from "next/router"; +import React, { useState } from "react"; + +import { setCart } from "redux/cart"; +import { useAppDispatch, useAppSelector } from "redux/hooks"; import { CustomerItemAction, selectCustomerItemActions, setSelectedCustomerItemActions, -} from "../redux/selectedCustomerItemActions"; -import { useAppDispatch, useAppSelector } from "../redux/hooks"; -import { LoadingButton } from "@mui/lab"; -import { useRouter } from "next/router"; -import { setCart } from "../redux/cart"; +} from "redux/selectedCustomerItemActions"; import { generateCartItemsFromCustomerItemActions, getExtendTime, -} from "../utils/cartUtils"; +} from "utils/cartUtils"; const calculateMaxDeadline = (): string => { const now = moment(); @@ -62,7 +63,7 @@ const canBuyout = (customerItem: CustomerItem) => { return ( !isDeadlineExpired(customerItem.deadline.toString()) && !moment().isSameOrBefore( - moment(customerItem.creationTime).add(2, "weeks") + moment(customerItem.creationTime).add(2, "weeks"), ) && !customerItem.returned && !customerItem.match @@ -112,7 +113,7 @@ const CustomerItemOverview = ({ customerItemAction.action === "buyout" ? `Kjøp ut for ${customerItemAction.customerItem.amountLeftToPay} kr` : `Forleng til ${moment(getExtendTime(branchInfo)).format( - "DD/MM/YY" + "DD/MM/YY", )} for 50kr`; return ( @@ -131,7 +132,7 @@ const CustomerItemOverview = ({ branchInfo.paymentInfo?.extendPeriods.some( (extendPeriod) => extendPeriod.type === "semester" && - customerItem.deadline !== extendPeriod.date + customerItem.deadline !== extendPeriod.date, ) ); }; @@ -140,7 +141,7 @@ const CustomerItemOverview = ({ return itemActions.some( (itemAction) => itemAction.customerItem.id === customerItemAction.customerItem.id && - itemAction.action === customerItemAction.action + itemAction.action === customerItemAction.action, ); }; @@ -149,7 +150,7 @@ const CustomerItemOverview = ({ return itemActions.some( (itemAction) => itemAction.customerItem.id === customerItemAction.customerItem.id && - itemAction.action !== customerItemAction.action + itemAction.action !== customerItemAction.action, ); }; @@ -167,7 +168,7 @@ const CustomerItemOverview = ({ !( itemAction.customerItem.id === customerItemAction.customerItem.id && itemAction.action === targetAction - ) + ), ); } @@ -190,7 +191,7 @@ const CustomerItemOverview = ({ > {customerItems .filter( - (customerItem) => !customerItem.returned && !customerItem.buyout + (customerItem) => !customerItem.returned && !customerItem.buyout, ) .map((customerItem) => ( @@ -209,7 +210,7 @@ const CustomerItemOverview = ({ {moment(customerItem.handoutInfo?.time ?? "").format( - "DD/MM/YYYY" + "DD/MM/YYYY", )} @@ -255,7 +256,7 @@ const CustomerItemOverview = ({ ( branchNames.find( (branch) => - branch.id === customerItem.handoutInfo?.handoutById + branch.id === customerItem.handoutInfo?.handoutById, ) as Branch ).name }{" "} @@ -381,7 +382,7 @@ const CustomerItemOverview = ({ customerItem.returned || customerItem.buyout || customerItem.buyback || - customerItem.cancel + customerItem.cancel, ) .map((customerItem) => ( @@ -400,7 +401,7 @@ const CustomerItemOverview = ({ {moment(customerItem.handoutInfo?.time ?? "").format( - "DD/MM/YYYY" + "DD/MM/YYYY", )} @@ -411,7 +412,7 @@ const CustomerItemOverview = ({ {moment(customerItem.returnInfo?.time).format( - "DD/MM/YYYY" + "DD/MM/YYYY", )} @@ -441,7 +442,7 @@ const CustomerItemOverview = ({ setLoadingCart(true); const cartItems = await generateCartItemsFromCustomerItemActions( itemActions, - branchInfo + branchInfo, ); dispatch(setCart(cartItems)); setLoadingCart(false); diff --git a/src/components/DynamicLink.tsx b/src/components/DynamicLink.tsx index 7243f24..71a0a1d 100644 --- a/src/components/DynamicLink.tsx +++ b/src/components/DynamicLink.tsx @@ -1,10 +1,11 @@ -import NextLink, { LinkProps as NextLinkProps } from "next/link"; import { Link as MuiLink, LinkProps as MuiLinkProps } from "@mui/material"; -import { isLoggedIn } from "../api/auth"; -import { getAccessToken, getRefreshToken } from "../api/token"; -import BL_CONFIG from "../utils/bl-config"; +import NextLink, { LinkProps as NextLinkProps } from "next/link"; import { ForwardedRef, forwardRef, useEffect, useState } from "react"; +import { isLoggedIn } from "api/auth"; +import { getAccessToken, getRefreshToken } from "api/token"; +import BL_CONFIG from "utils/bl-config"; + type CustomNextLinkProps = Omit & { _href: NextLinkProps["href"]; }; @@ -12,8 +13,8 @@ type CustomNextLinkProps = Omit & { const CustomNextLink = forwardRef( ( { _href, ...props }: CustomNextLinkProps, - ref: ForwardedRef - ) => + ref: ForwardedRef, + ) => , ); CustomNextLink.displayName = "CustomNextLink"; diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 9ada472..90ba35e 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,12 +1,13 @@ -import ContactInfo from "./info/ContactInfo"; +import CopyrightIcon from "@mui/icons-material/Copyright"; import { Card } from "@mui/material"; +import Box from "@mui/material/Box"; import Typography from "@mui/material/Typography"; -import CopyrightIcon from "@mui/icons-material/Copyright"; import moment from "moment"; -import React from "react"; -import Box from "@mui/material/Box"; import Image from "next/image"; -import DynamicLink from "./DynamicLink"; +import React from "react"; + +import DynamicLink from "components/DynamicLink"; +import ContactInfo from "components/info/ContactInfo"; export default function Footer() { return ( diff --git a/src/components/NavBar.tsx b/src/components/NavBar.tsx index 6a8b654..9848673 100644 --- a/src/components/NavBar.tsx +++ b/src/components/NavBar.tsx @@ -1,14 +1,15 @@ -import React from "react"; +import { Button } from "@mui/material"; import AppBar from "@mui/material/AppBar"; import Box from "@mui/material/Box"; import Toolbar from "@mui/material/Toolbar"; import Typography from "@mui/material/Typography"; import Image from "next/image"; -import { Button } from "@mui/material"; -import DropDownMenu from "./SideMenuDrawer"; -import BranchSelect from "./BranchSelect"; -import DynamicLink from "./DynamicLink"; -import BL_CONFIG from "../utils/bl-config"; +import React from "react"; + +import BranchSelect from "components/BranchSelect"; +import DynamicLink from "components/DynamicLink"; +import DropDownMenu from "components/SideMenuDrawer"; +import BL_CONFIG from "utils/bl-config"; interface TabLinkProps { title: string; diff --git a/src/components/OrderHistory.tsx b/src/components/OrderHistory.tsx index 3ae9771..144a7b1 100644 --- a/src/components/OrderHistory.tsx +++ b/src/components/OrderHistory.tsx @@ -1,3 +1,5 @@ +import { Order, Payment } from "@boklisten/bl-model"; +import { LoadingButton } from "@mui/lab"; import { Box, Card, @@ -13,12 +15,11 @@ import { TableRow, Typography, } from "@mui/material"; -import React, { useState } from "react"; -import { Order, Payment } from "@boklisten/bl-model"; -import moment from "moment"; -import { get } from "../api/api"; import Button from "@mui/material/Button"; -import { LoadingButton } from "@mui/lab"; +import moment from "moment"; +import React, { useState } from "react"; + +import { get } from "api/api"; // fetchPayments(orders); // types are from a business POV @@ -66,7 +67,7 @@ const OrderHistory = ({ orders }: { orders: Order[] }) => { for (let index = 0; index < byteNumbers.length; index++) { byteNumbers[index] = byteCharacters.codePointAt(index); } - + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const blob = new Blob([new Uint8Array(byteNumbers)], { type: "application/pdf", @@ -212,7 +213,7 @@ const OrderHistory = ({ orders }: { orders: Order[] }) => { }} > {order.orderItems.map((orderItem) => { - // @ts-ignore + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore return ( { )} - {/** @ts-ignore*/} + + {/** + eslint-disable-next-line @typescript-eslint/ban-ts-comment + @ts-ignore*/} {orderItem.info?.["amountLeftToPay"] && ( Betal senere - {/** @ts-ignore*/} + {/** + eslint-disable-next-line @typescript-eslint/ban-ts-comment + @ts-ignore*/} {orderItem.info["amountLeftToPay"]} kr @@ -280,7 +286,7 @@ const OrderHistory = ({ orders }: { orders: Order[] }) => { {moment(orderItem.info.to).format( - "DD/MM/YYYY" + "DD/MM/YYYY", )} @@ -301,7 +307,7 @@ const OrderHistory = ({ orders }: { orders: Order[] }) => { setOpenOrder(order.id); if (order.payments && order.payments.length > 0) { const payment = await fetchPayment( - order.payments[0] as string + order.payments[0] as string, ); setOpenPayment(payment); } diff --git a/src/components/SideMenuDrawer.tsx b/src/components/SideMenuDrawer.tsx index f1ce0ab..c934edd 100644 --- a/src/components/SideMenuDrawer.tsx +++ b/src/components/SideMenuDrawer.tsx @@ -1,26 +1,27 @@ -import React, { useState, KeyboardEvent, MouseEvent, ReactNode } from "react"; -import Box from "@mui/material/Box"; -import SwipeableDrawer from "@mui/material/SwipeableDrawer"; -import List from "@mui/material/List"; -import Divider from "@mui/material/Divider"; -import ListItemIcon from "@mui/material/ListItemIcon"; -import ListItemText from "@mui/material/ListItemText"; -import MenuIcon from "@mui/icons-material/Menu"; -import { IconButton, ListItemButton } from "@mui/material"; -import BookIcon from "@mui/icons-material/Book"; -import MenuBookIcon from "@mui/icons-material/MenuBook"; -import ReceiptIcon from "@mui/icons-material/Receipt"; -import InfoIcon from "@mui/icons-material/Info"; import AccessTimeIcon from "@mui/icons-material/AccessTime"; +import BookIcon from "@mui/icons-material/Book"; import EmailIcon from "@mui/icons-material/Email"; -import SettingsIcon from "@mui/icons-material/Settings"; -import PersonAddIcon from "@mui/icons-material/PersonAdd"; +import InfoIcon from "@mui/icons-material/Info"; import LoginIcon from "@mui/icons-material/Login"; import LogoutIcon from "@mui/icons-material/Logout"; -import { isLoggedIn, logout } from "api/auth"; -import DynamicLink from "./DynamicLink"; -import BL_CONFIG from "../utils/bl-config"; +import MenuIcon from "@mui/icons-material/Menu"; +import MenuBookIcon from "@mui/icons-material/MenuBook"; +import PersonAddIcon from "@mui/icons-material/PersonAdd"; +import ReceiptIcon from "@mui/icons-material/Receipt"; +import SettingsIcon from "@mui/icons-material/Settings"; +import { IconButton, ListItemButton } from "@mui/material"; +import Box from "@mui/material/Box"; +import Divider from "@mui/material/Divider"; +import List from "@mui/material/List"; +import ListItemIcon from "@mui/material/ListItemIcon"; +import ListItemText from "@mui/material/ListItemText"; +import SwipeableDrawer from "@mui/material/SwipeableDrawer"; import { useRouter } from "next/router"; +import React, { useState, KeyboardEvent, MouseEvent, ReactNode } from "react"; + +import { isLoggedIn, logout } from "api/auth"; +import DynamicLink from "components/DynamicLink"; +import BL_CONFIG from "utils/bl-config"; interface DrawerLinkProps { title: string; diff --git a/src/components/SubjectSelect.tsx b/src/components/SubjectSelect.tsx index baacce3..7636ad5 100644 --- a/src/components/SubjectSelect.tsx +++ b/src/components/SubjectSelect.tsx @@ -8,15 +8,16 @@ import { } from "@mui/material"; import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; -import React, { useState } from "react"; -import { useAppDispatch, useAppSelector } from "../redux/hooks"; -import { selectBranch } from "../redux/selectedBranch"; import Typography from "@mui/material/Typography"; import { useRouter } from "next/router"; -import { selectSubjects, setSelectedSubjects } from "../redux/selectedSubjects"; -import { generateCartItemsFromSubjects } from "../utils/cartUtils"; -import { setCart } from "../redux/cart"; -import FixedSuccessButton from "./FixedSuccessButton"; +import React, { useState } from "react"; + +import FixedSuccessButton from "components/FixedSuccessButton"; +import { setCart } from "redux/cart"; +import { useAppDispatch, useAppSelector } from "redux/hooks"; +import { selectBranch } from "redux/selectedBranch"; +import { selectSubjects, setSelectedSubjects } from "redux/selectedSubjects"; +import { generateCartItemsFromSubjects } from "utils/cartUtils"; const SubjectCheckbox = ({ subject }: { subject: string }) => { const dispatch = useAppDispatch(); @@ -24,8 +25,10 @@ const SubjectCheckbox = ({ subject }: { subject: string }) => { const removeSubject = (subject: string) => { dispatch( setSelectedSubjects( - selectedSubjects.filter((selectedSubject) => selectedSubject != subject) - ) + selectedSubjects.filter( + (selectedSubject) => selectedSubject != subject, + ), + ), ); }; @@ -101,7 +104,7 @@ const SubjectSelect = ({ branchItems }: { branchItems: BranchItem[] }) => { const getOptionalSubjects = (): string[] => { const commonSubjects = getCommonSubjects(); return getUniqueSubjects().filter( - (subject) => !commonSubjects.includes(subject) + (subject) => !commonSubjects.includes(subject), ); }; @@ -109,7 +112,7 @@ const SubjectSelect = ({ branchItems }: { branchItems: BranchItem[] }) => { dispatch( setSelectedSubjects([ ...new Set([...selectedSubjects, ...getCommonSubjects()]), - ]) + ]), ); }; @@ -149,7 +152,7 @@ const SubjectSelect = ({ branchItems }: { branchItems: BranchItem[] }) => { setLoadingCart(true); const cartItems = await generateCartItemsFromSubjects( selectedSubjects, - selectedBranch.id + selectedBranch.id, ); dispatch(setCart(cartItems)); setLoadingCart(false); diff --git a/src/components/cart/Cart.tsx b/src/components/cart/Cart.tsx index 32760e5..5a2dbc3 100644 --- a/src/components/cart/Cart.tsx +++ b/src/components/cart/Cart.tsx @@ -1,25 +1,26 @@ -import { useAppSelector } from "../../redux/hooks"; -import { selectCartItems } from "../../redux/cart"; import { Table, TableBody, TableContainer } from "@mui/material"; import Box from "@mui/material/Box"; -import { useRouter } from "next/router"; import Typography from "@mui/material/Typography"; -import { isLoggedIn } from "../../api/auth"; -import FixedSuccessButton from "../FixedSuccessButton"; -import BackButton from "./BackButton"; -import CartTableHeader from "./CartTableHeader"; -import CartTableRow from "./CartTableRow"; +import { useRouter } from "next/router"; + +import { isLoggedIn } from "api/auth"; +import BackButton from "components/cart/BackButton"; +import CartTableHeader from "components/cart/CartTableHeader"; +import CartTableRow from "components/cart/CartTableRow"; +import FixedSuccessButton from "components/FixedSuccessButton"; +import { selectCartItems } from "redux/cart"; +import { useAppSelector } from "redux/hooks"; const Cart = () => { const cartItems = useAppSelector(selectCartItems); const router = useRouter(); const hasCustomerItemsInCart = cartItems.some( - (cartItem) => cartItem.customerItem + (cartItem) => cartItem.customerItem, ); const branchCoversCosts = cartItems.every( - (cartItem) => cartItem.orderItem.amount === 0 + (cartItem) => cartItem.orderItem.amount === 0, ); return ( @@ -51,7 +52,7 @@ const Cart = () => { label={"Til betaling"} onClick={() => router.push( - isLoggedIn() ? "/checkout" : "/auth/login?redirect=checkout" + isLoggedIn() ? "/checkout" : "/auth/login?redirect=checkout", ) } /> diff --git a/src/components/cart/CartTableRow.tsx b/src/components/cart/CartTableRow.tsx index 3ac2c91..520a052 100644 --- a/src/components/cart/CartTableRow.tsx +++ b/src/components/cart/CartTableRow.tsx @@ -1,11 +1,12 @@ import { BranchItem, OrderItemType } from "@boklisten/bl-model"; -import { CartItem } from "../../redux/cart"; -import { useAppSelector } from "../../redux/hooks"; -import { selectSubjects } from "../../redux/selectedSubjects"; import { TableCell, TableRow, Tooltip } from "@mui/material"; import moment from "moment"; -import SelectDeadline from "./SelectDeadline"; -import RemoveCartItemButton from "./RemoveCartItemButton"; + +import RemoveCartItemButton from "components/cart/RemoveCartItemButton"; +import SelectDeadline from "components/cart/SelectDeadline"; +import { CartItem } from "redux/cart"; +import { useAppSelector } from "redux/hooks"; +import { selectSubjects } from "redux/selectedSubjects"; const getReadableOrderType = (orderItemType: OrderItemType) => orderItemType === "extend" ? "forlenging" : "utkjøp"; @@ -14,9 +15,9 @@ const CartTableRow = ({ cartItem }: { cartItem: CartItem }) => { const selectedSubjects = useAppSelector(selectSubjects); const getItemSubjects = (item: BranchItem) => item.categories?.filter((category) => - selectedSubjects.includes(category) + selectedSubjects.includes(category), ) ?? []; - + // eslint-disable-next-line @typescript-eslint/ban-ts-comment /* @ts-ignore */ const amountLeftToPay = cartItem.orderItem.info?.amountLeftToPay ?? 0; diff --git a/src/components/cart/RemoveCartItemButton.tsx b/src/components/cart/RemoveCartItemButton.tsx index e726562..d654d4b 100644 --- a/src/components/cart/RemoveCartItemButton.tsx +++ b/src/components/cart/RemoveCartItemButton.tsx @@ -1,7 +1,8 @@ -import { CartItem, removeCartItem } from "../../redux/cart"; -import { useAppDispatch } from "../../redux/hooks"; -import { IconButton } from "@mui/material"; import CancelIcon from "@mui/icons-material/Cancel"; +import { IconButton } from "@mui/material"; + +import { CartItem, removeCartItem } from "redux/cart"; +import { useAppDispatch } from "redux/hooks"; const RemoveCartItemButton = ({ cartItem }: { cartItem: CartItem }) => { const dispatch = useAppDispatch(); diff --git a/src/components/cart/SelectDeadline.tsx b/src/components/cart/SelectDeadline.tsx index 39d1b20..155f0e4 100644 --- a/src/components/cart/SelectDeadline.tsx +++ b/src/components/cart/SelectDeadline.tsx @@ -1,13 +1,14 @@ -import { CartItem, updatePeriod } from "../../redux/cart"; -import { useAppDispatch } from "../../redux/hooks"; -import { FormControl, InputLabel, MenuItem, Select } from "@mui/material"; import { Branch, Period } from "@boklisten/bl-model"; +import { FormControl, InputLabel, MenuItem, Select } from "@mui/material"; +import moment from "moment"; + +import { CartItem, updatePeriod } from "redux/cart"; +import { useAppDispatch } from "redux/hooks"; import { getOrderItemTypeFromBranch, getPartlyPaymentPeriodDate, getRentPeriodDate, -} from "../../utils/cartUtils"; -import moment from "moment"; +} from "utils/cartUtils"; const getDeadline = (period: Period, branch: Branch) => { const deadline = @@ -31,7 +32,7 @@ const SelectDeadline = ({ cartItem }: { cartItem: CartItem }) => { updatePeriod({ cartItem, updatedPeriod: event.target.value as Period, - }) + }), ) } > diff --git a/src/components/checkout/BranchDelivery.tsx b/src/components/checkout/BranchDelivery.tsx index 75cc6c9..8e17f5a 100644 --- a/src/components/checkout/BranchDelivery.tsx +++ b/src/components/checkout/BranchDelivery.tsx @@ -1,8 +1,9 @@ import Typography from "@mui/material/Typography"; -import { useAppDispatch, useAppSelector } from "../../redux/hooks"; -import { selectCartItems, setDeliveryPrice } from "../../redux/cart"; import { Dispatch, SetStateAction, useEffect } from "react"; +import { selectCartItems, setDeliveryPrice } from "redux/cart"; +import { useAppDispatch, useAppSelector } from "redux/hooks"; + const BranchDelivery = ({ setWait, }: { diff --git a/src/components/checkout/CheckoutStep.tsx b/src/components/checkout/CheckoutStep.tsx index 09a70e0..96e3d16 100644 --- a/src/components/checkout/CheckoutStep.tsx +++ b/src/components/checkout/CheckoutStep.tsx @@ -1,12 +1,13 @@ -import TermsAndConditionsStep from "./TermsAndConditionsStep"; +import { UserDetail } from "@boklisten/bl-model"; import { Alert } from "@mui/material"; -import { CheckoutSteps } from "./CheckoutStepper"; -import PaymentStep from "./PaymentStep"; -import DeliveryStep from "./DeliveryStep"; import { Dispatch, SetStateAction, useEffect, useState } from "react"; -import { UserDetail } from "@boklisten/bl-model"; -import { getAccessTokenBody } from "../../api/token"; -import { get } from "../../api/api"; + +import { get } from "api/api"; +import { getAccessTokenBody } from "api/token"; +import { CheckoutSteps } from "components/checkout/CheckoutStepper"; +import DeliveryStep from "components/checkout/DeliveryStep"; +import PaymentStep from "components/checkout/PaymentStep"; +import TermsAndConditionsStep from "components/checkout/TermsAndConditionsStep"; const CheckoutStep = ({ step, diff --git a/src/components/checkout/CheckoutStepper.tsx b/src/components/checkout/CheckoutStepper.tsx index 9cff139..1b1ddab 100644 --- a/src/components/checkout/CheckoutStepper.tsx +++ b/src/components/checkout/CheckoutStepper.tsx @@ -1,8 +1,9 @@ import { Step, StepContent, StepLabel, Stepper } from "@mui/material"; -import { useState } from "react"; -import Button from "@mui/material/Button"; -import CheckoutStep from "./CheckoutStep"; import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import { useState } from "react"; + +import CheckoutStep from "components/checkout/CheckoutStep"; export type CheckoutSteps = "tos" | "payment" | "delivery" | undefined; diff --git a/src/components/checkout/DeliveryStep.tsx b/src/components/checkout/DeliveryStep.tsx index 455d487..b5b0edb 100644 --- a/src/components/checkout/DeliveryStep.tsx +++ b/src/components/checkout/DeliveryStep.tsx @@ -1,18 +1,19 @@ -import { Dispatch, SetStateAction, useEffect, useState } from "react"; +import { UserDetail } from "@boklisten/bl-model"; import LocalShippingIcon from "@mui/icons-material/LocalShipping"; import StorefrontIcon from "@mui/icons-material/Storefront"; -import Tabs from "@mui/material/Tabs"; +import { Tooltip } from "@mui/material"; import Tab from "@mui/material/Tab"; -import BranchDelivery from "./BranchDelivery"; -import { useAppDispatch, useAppSelector } from "../../redux/hooks"; +import Tabs from "@mui/material/Tabs"; +import { Dispatch, SetStateAction, useEffect, useState } from "react"; + +import BranchDelivery from "components/checkout/BranchDelivery"; +import PostalDelivery from "components/checkout/PostalDelivery"; import { selectCartItems, selectDeliveryMethod, setDeliveryMethod, -} from "../../redux/cart"; -import { Tooltip } from "@mui/material"; -import PostalDelivery from "./PostalDelivery"; -import { UserDetail } from "@boklisten/bl-model"; +} from "redux/cart"; +import { useAppDispatch, useAppSelector } from "redux/hooks"; type DeliveryMethods = { byMail: boolean; diff --git a/src/components/checkout/PaymentStep.tsx b/src/components/checkout/PaymentStep.tsx index ec69fc7..48e7c36 100644 --- a/src/components/checkout/PaymentStep.tsx +++ b/src/components/checkout/PaymentStep.tsx @@ -1,5 +1,5 @@ -import PaymentSummary from "./PaymentSummary"; -import DibsPayment from "./DibsPayment"; +import DibsPayment from "components/checkout/DibsPayment"; +import PaymentSummary from "components/checkout/PaymentSummary"; const PaymentStep = () => { return ( diff --git a/src/components/checkout/PaymentSummary.tsx b/src/components/checkout/PaymentSummary.tsx index a132bd0..15fd435 100644 --- a/src/components/checkout/PaymentSummary.tsx +++ b/src/components/checkout/PaymentSummary.tsx @@ -7,10 +7,11 @@ import { TableHead, TableRow, } from "@mui/material"; -import React from "react"; -import { useAppSelector } from "../../redux/hooks"; -import { selectCartItems, selectDeliveryPrice } from "../../redux/cart"; import moment from "moment"; +import React from "react"; + +import { selectCartItems, selectDeliveryPrice } from "redux/cart"; +import { useAppSelector } from "redux/hooks"; const readableOrderItemTypes = { rent: "lån", @@ -45,7 +46,7 @@ const PaymentSummary = () => { cartItem.orderItem.type === "buyout" ? "" : ` til ${moment(cartItem.orderItem.info?.to).format( - "DD/MM/YY" + "DD/MM/YY", )}`; return ( @@ -73,7 +74,7 @@ const PaymentSummary = () => { {cartItems.reduce( (previous, next) => previous + next.orderItem.amount, - 0 + 0, ) + deliveryPrice} {"\u00A0"} kr diff --git a/src/components/checkout/PostalDelivery.tsx b/src/components/checkout/PostalDelivery.tsx index 00614bb..a1848fc 100644 --- a/src/components/checkout/PostalDelivery.tsx +++ b/src/components/checkout/PostalDelivery.tsx @@ -1,5 +1,4 @@ -import Typography from "@mui/material/Typography"; -import Grid from "@mui/material/Grid"; +import { DeliveryInfoBring, UserDetail } from "@boklisten/bl-model"; import { Alert, Divider, @@ -11,18 +10,23 @@ import { TableHead, TableRow, } from "@mui/material"; +import Box from "@mui/material/Box"; +import Grid from "@mui/material/Grid"; import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import moment from "moment"; import React, { Dispatch, SetStateAction, useEffect, useState } from "react"; import { useForm } from "react-hook-form"; -import { extractFirstName, extractLastName } from "../user/UserDetailEditor"; import isPostalCode from "validator/lib/isPostalCode"; -import { fetchData } from "../../api/requests"; -import Box from "@mui/material/Box"; -import { DeliveryInfoBring, UserDetail } from "@boklisten/bl-model"; -import { add } from "../../api/api"; -import { useAppDispatch, useAppSelector } from "../../redux/hooks"; -import { selectOrderID, setDeliveryPrice } from "../../redux/cart"; -import moment from "moment"; + +import { add } from "api/api"; +import { fetchData } from "api/requests"; +import { + extractFirstName, + extractLastName, +} from "components/user/UserDetailEditor"; +import { selectOrderID, setDeliveryPrice } from "redux/cart"; +import { useAppDispatch, useAppSelector } from "redux/hooks"; type PostalDeliveryFields = { firstName: string; @@ -102,7 +106,7 @@ const PostalDelivery = ({ address: string, postalCode: string, postalCity: string, - orderID: string + orderID: string, ) => { setWait(true); const deliveryInfo: DeliveryInfoBring | undefined = await add( @@ -126,7 +130,7 @@ const PostalDelivery = ({ }, order: orderID, amount: 0, - } + }, ).then((response) => response?.data.data[0].info); if (!deliveryInfo) return; @@ -152,7 +156,7 @@ const PostalDelivery = ({ getValues("address"), getValues("postalCode"), postalCity, - orderID + orderID, ); // eslint-disable-next-line react-hooks/exhaustive-deps }, [getValues, orderID, postalCity]); @@ -166,7 +170,6 @@ const PostalDelivery = ({ data-testid="error-message" sx={{ marginY: 1 }} > - {/*@ts-ignore*/} {message.message} ))} @@ -248,7 +251,7 @@ const PostalDelivery = ({ const response = await fetchData( "/api/delivery/postal-code", "POST", - event.target.value + event.target.value, ); setWaitingForPostalCity(false); if (!response.postalCity) { @@ -263,7 +266,7 @@ const PostalDelivery = ({ getValues("address"), event.target.value, postalCity, - orderID + orderID, ); }, required: "Du må fylle inn postnummer", @@ -277,7 +280,7 @@ const PostalDelivery = ({ const response = await fetchData( "/api/delivery/postal-code", "POST", - v + v, ); if (!response.postalCity) { diff --git a/src/components/checkout/TermsAndConditionsStep.tsx b/src/components/checkout/TermsAndConditionsStep.tsx index d9bf435..2121b6c 100644 --- a/src/components/checkout/TermsAndConditionsStep.tsx +++ b/src/components/checkout/TermsAndConditionsStep.tsx @@ -1,7 +1,8 @@ +import Box from "@mui/material/Box"; import Typography from "@mui/material/Typography"; import { Dispatch, SetStateAction, useEffect } from "react"; -import Box from "@mui/material/Box"; -import DynamicLink from "../DynamicLink"; + +import DynamicLink from "components/DynamicLink"; const TermsAndConditionsStep = ({ setWait, diff --git a/src/components/info/BranchInfo.tsx b/src/components/info/BranchInfo.tsx index 6eb784f..41c5f0c 100644 --- a/src/components/info/BranchInfo.tsx +++ b/src/components/info/BranchInfo.tsx @@ -1,17 +1,18 @@ import { Branch, OpeningHour } from "@boklisten/bl-model"; -import { Box, Typography, Alert } from "@mui/material"; import LocationOnIcon from "@mui/icons-material/LocationOn"; -import ContactInfo from "components/info/ContactInfo"; -import moment from "moment"; -import "moment/locale/nb"; +import { Box, Typography, Alert } from "@mui/material"; +import Paper from "@mui/material/Paper"; import Table from "@mui/material/Table"; import TableBody from "@mui/material/TableBody"; import TableCell from "@mui/material/TableCell"; import TableContainer from "@mui/material/TableContainer"; import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; -import Paper from "@mui/material/Paper"; -import BranchSelect from "../BranchSelect"; +import moment from "moment"; +import "moment/locale/nb"; + +import BranchSelect from "components/BranchSelect"; +import ContactInfo from "components/info/ContactInfo"; const OpeningHourRow = ({ openingHour }: { openingHour: OpeningHour }) => { const fromDate = moment(openingHour.from).locale("nb"); diff --git a/src/components/info/BuybackList.tsx b/src/components/info/BuybackList.tsx index 15480d6..b7c85a1 100644 --- a/src/components/info/BuybackList.tsx +++ b/src/components/info/BuybackList.tsx @@ -10,8 +10,9 @@ import { Typography, } from "@mui/material"; import { Box } from "@mui/system"; -import { fetcher } from "api/requests"; import useSWR, { SWRResponse } from "swr"; + +import { fetcher } from "api/requests"; import BL_CONFIG from "utils/bl-config"; import { Item } from "utils/types"; diff --git a/src/components/info/ContactInfo.tsx b/src/components/info/ContactInfo.tsx index c3c7945..6b786b0 100644 --- a/src/components/info/ContactInfo.tsx +++ b/src/components/info/ContactInfo.tsx @@ -1,11 +1,12 @@ -import React from "react"; -import { Typography } from "@mui/material"; -import { Box } from "@mui/system"; import EmailIcon from "@mui/icons-material/Email"; -import PhoneIphoneIcon from "@mui/icons-material/PhoneIphone"; import LocationOnIcon from "@mui/icons-material/LocationOn"; -import { contactInfo } from "../../utils/constants"; -import DynamicLink from "../DynamicLink"; +import PhoneIphoneIcon from "@mui/icons-material/PhoneIphone"; +import { Typography } from "@mui/material"; +import { Box } from "@mui/system"; +import React from "react"; + +import DynamicLink from "components/DynamicLink"; +import { contactInfo } from "utils/constants"; const ContactInfo = () => { return ( diff --git a/src/components/info/DynamicNav.tsx b/src/components/info/DynamicNav.tsx index 5433e85..4ebaafe 100644 --- a/src/components/info/DynamicNav.tsx +++ b/src/components/info/DynamicNav.tsx @@ -1,8 +1,3 @@ -import React from "react"; -import Box from "@mui/material/Box"; -import Tabs from "@mui/material/Tabs"; -import Tab from "@mui/material/Tab"; -import { useRouter } from "next/dist/client/router"; import { Divider, FormControl, @@ -10,8 +5,14 @@ import { NativeSelect, SelectChangeEvent, } from "@mui/material"; +import Box from "@mui/material/Box"; +import Tab from "@mui/material/Tab"; +import Tabs from "@mui/material/Tabs"; +import { useRouter } from "next/dist/client/router"; +import React from "react"; import stringSimilarity from "string-similarity"; -import DynamicLink from "../DynamicLink"; + +import DynamicLink from "components/DynamicLink"; export interface LinkTabProps { label: string; @@ -40,6 +41,7 @@ function SelectTab({ tab.href) + tabs.map((tab) => tab.href), ).bestMatchIndex; // A hack to be able to use two rows of tabs diff --git a/src/components/info/DynamicSubNav.tsx b/src/components/info/DynamicSubNav.tsx index 44c6b6f..e213329 100644 --- a/src/components/info/DynamicSubNav.tsx +++ b/src/components/info/DynamicSubNav.tsx @@ -1,10 +1,10 @@ -import { ReactElement } from "react"; import ToggleButton from "@mui/material/ToggleButton"; import ToggleButtonGroup from "@mui/material/ToggleButtonGroup"; +import { Box } from "@mui/system"; import { useRouter } from "next/dist/client/router"; -import stringSimilarity from "string-similarity"; import NextLink from "next/link"; -import { Box } from "@mui/system"; +import { ReactElement } from "react"; +import stringSimilarity from "string-similarity"; export interface DynamicSubNavProps { tabs: { @@ -69,7 +69,7 @@ export default function DynamicSubNav({ tabs }: DynamicSubNavProps) { tabs[ stringSimilarity.findBestMatch( router.route, - tabs.map((tab) => tab.href) + tabs.map((tab) => tab.href), ).bestMatchIndex ]?.href ?? null; diff --git a/src/components/info/EditableQna.tsx b/src/components/info/EditableQna.tsx index 0b7aa79..f208e72 100644 --- a/src/components/info/EditableQna.tsx +++ b/src/components/info/EditableQna.tsx @@ -1,4 +1,8 @@ -import React, { useEffect } from "react"; +import AddCircleIcon from "@mui/icons-material/AddCircle"; +import DeleteIcon from "@mui/icons-material/Delete"; +import EditIcon from "@mui/icons-material/Edit"; +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +import SaveIcon from "@mui/icons-material/Save"; import { Accordion, AccordionDetails, @@ -8,13 +12,9 @@ import { Tooltip, Typography, } from "@mui/material"; -import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; -import EditIcon from "@mui/icons-material/Edit"; -import SaveIcon from "@mui/icons-material/Save"; -import DeleteIcon from "@mui/icons-material/Delete"; -import AddCircleIcon from "@mui/icons-material/AddCircle"; -import { useRef, useState } from "react"; import { Box } from "@mui/system"; +import React, { useEffect, useRef, useState } from "react"; + import { isAdmin } from "api/auth"; interface QNA { @@ -78,8 +78,10 @@ const QuestionWithAnswer = ({ if (edit) { updateQuestion({ id: id, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore question: questionInput.current.value, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore answer: answerInput.current.value, }); diff --git a/src/components/info/Editor.tsx b/src/components/info/Editor.tsx index 7d76552..7b212d8 100644 --- a/src/components/info/Editor.tsx +++ b/src/components/info/Editor.tsx @@ -1,15 +1,16 @@ -import React, { useEffect } from "react"; +import { Button, Container } from "@mui/material"; import { convertFromRaw, convertToRaw, EditorState } from "draft-js"; -import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css"; import dynamic from "next/dynamic"; -import { useState } from "react"; -import { Button, Container } from "@mui/material"; +import React, { useEffect, useState } from "react"; +import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css"; + import { isAdmin } from "api/auth"; const Editor = dynamic( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore () => import("react-draft-wysiwyg").then((module) => module.Editor), - { ssr: false } + { ssr: false }, ); const sanitizeRawState = (raw: string) => { @@ -19,7 +20,7 @@ const sanitizeRawState = (raw: string) => { const getEditorStateFromRaw = (rawState: string) => { try { return EditorState.createWithContent( - convertFromRaw(JSON.parse(sanitizeRawState(rawState))) + convertFromRaw(JSON.parse(sanitizeRawState(rawState))), ); } catch (error) { console.error(error); @@ -35,7 +36,7 @@ const CustomEditor = ({ rawEditorState }: { rawEditorState: string }) => { const [editorState, setEditorState] = useState(initialEditorState); const rawState = JSON.stringify( - convertToRaw(editorState.getCurrentContent()) + convertToRaw(editorState.getCurrentContent()), ); const [readOnly, setReadOnly] = useState(true); @@ -69,6 +70,7 @@ const CustomEditor = ({ rawEditorState }: { rawEditorState: string }) => { )} import("react-qr-barcode-scanner"), { @@ -18,7 +18,7 @@ const BarcodeQrScanner = ({ width={500} height={500} facingMode="environment" - // @ts-ignore + // eslint-disable-next-line @typescript-eslint/no-explicit-any onUpdate={(error: unknown, result: any) => { if (result?.text) { handleScan(result.text as string); diff --git a/src/components/matches/MatchDetail.tsx b/src/components/matches/MatchDetail.tsx index 3c89ae8..c74ac08 100644 --- a/src/components/matches/MatchDetail.tsx +++ b/src/components/matches/MatchDetail.tsx @@ -1,6 +1,5 @@ -import React from "react"; import { MatchVariant, MatchWithDetails } from "@boklisten/bl-model"; -import { apiFetcher } from "../../api/api"; +import { ArrowBack } from "@mui/icons-material"; import { Alert, Button, @@ -9,24 +8,26 @@ import { Skeleton, Typography, } from "@mui/material"; +import React from "react"; import useSWR from "swr"; -import BL_CONFIG from "../../utils/bl-config"; -import { getAccessTokenBody } from "../../api/token"; -import UserMatchDetail from "./UserMatchDetail"; -import StandMatchDetail from "./StandMatchDetail"; -import { ArrowBack } from "@mui/icons-material"; -import DynamicLink from "../DynamicLink"; + +import { apiFetcher } from "api/api"; +import { getAccessTokenBody } from "api/token"; +import DynamicLink from "components/DynamicLink"; +import StandMatchDetail from "components/matches/StandMatchDetail"; +import UserMatchDetail from "components/matches/UserMatchDetail"; +import BL_CONFIG from "utils/bl-config"; const MatchDetail = ({ matchId }: { matchId: string }) => { const { data: accessToken, error: tokenError } = useSWR("userId", () => - getAccessTokenBody() + getAccessTokenBody(), ); const userId = accessToken?.details; const { data: matches, error: matchesError } = useSWR( `${BL_CONFIG.collection.match}/me`, apiFetcher, - { refreshInterval: 5000 } + { refreshInterval: 5000 }, ); if (tokenError || matchesError) { diff --git a/src/components/matches/MatchItemTable.tsx b/src/components/matches/MatchItemTable.tsx index ebca945..b3acd69 100644 --- a/src/components/matches/MatchItemTable.tsx +++ b/src/components/matches/MatchItemTable.tsx @@ -1,3 +1,5 @@ +import CheckBoxIcon from "@mui/icons-material/CheckBox"; +import ErrorIcon from "@mui/icons-material/Error"; import { Box, Table, @@ -8,10 +10,9 @@ import { TableRow, Tooltip, } from "@mui/material"; -import CheckBoxIcon from "@mui/icons-material/CheckBox"; -import ErrorIcon from "@mui/icons-material/Error"; import React from "react"; -import { ItemStatus } from "./matches-helper"; + +import { ItemStatus } from "components/matches/matches-helper"; const MatchItemTable = ({ itemStatuses, diff --git a/src/components/matches/MeetingInfo.tsx b/src/components/matches/MeetingInfo.tsx index 09b1854..4fb53d7 100644 --- a/src/components/matches/MeetingInfo.tsx +++ b/src/components/matches/MeetingInfo.tsx @@ -1,10 +1,11 @@ -import { Box, Typography } from "@mui/material"; +import { MatchWithDetails } from "@boklisten/bl-model"; +import PlaceIcon from "@mui/icons-material/Place"; import ScheduleIcon from "@mui/icons-material/Schedule"; -import { formatDatetime } from "./matchesList/helper"; +import { Box, Typography } from "@mui/material"; import React from "react"; -import PlaceIcon from "@mui/icons-material/Place"; -import { MatchWithDetails } from "@boklisten/bl-model"; -import DynamicLink from "../DynamicLink"; + +import DynamicLink from "components/DynamicLink"; +import { formatDatetime } from "components/matches/matchesList/helper"; const MeetingInfo = ({ match }: { match: MatchWithDetails }) => { const meetingTime = match.meetingInfo.date; diff --git a/src/components/matches/OtherPersonContact.tsx b/src/components/matches/OtherPersonContact.tsx index 88d6d03..d373289 100644 --- a/src/components/matches/OtherPersonContact.tsx +++ b/src/components/matches/OtherPersonContact.tsx @@ -1,9 +1,10 @@ -import ContactInfo from "../info/ContactInfo"; -import { Box, Typography } from "@mui/material"; +import { MatchVariant, MatchWithDetails } from "@boklisten/bl-model"; import PhoneIphoneIcon from "@mui/icons-material/PhoneIphone"; -import DynamicLink from "../DynamicLink"; +import { Box, Typography } from "@mui/material"; import React from "react"; -import { MatchVariant, MatchWithDetails } from "@boklisten/bl-model"; + +import DynamicLink from "components/DynamicLink"; +import ContactInfo from "components/info/ContactInfo"; const OtherPersonContact = ({ match, diff --git a/src/components/matches/Scanner/ManualRegistrationModal.tsx b/src/components/matches/Scanner/ManualRegistrationModal.tsx index 6a61bc1..0d7eade 100644 --- a/src/components/matches/Scanner/ManualRegistrationModal.tsx +++ b/src/components/matches/Scanner/ManualRegistrationModal.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import { LoadingButton } from "@mui/lab"; import { Box, Button, @@ -9,7 +9,7 @@ import { TextField, Typography, } from "@mui/material"; -import { LoadingButton } from "@mui/lab"; +import React, { useState } from "react"; const ManualRegistrationModal = ({ open, diff --git a/src/components/matches/Scanner/Scanner.tsx b/src/components/matches/Scanner/Scanner.tsx index 01e5904..bb3c062 100644 --- a/src/components/matches/Scanner/Scanner.tsx +++ b/src/components/matches/Scanner/Scanner.tsx @@ -1,12 +1,13 @@ -import React, { useRef, useState } from "react"; -import { AlertColor, Button } from "@mui/material"; -import { addWithEndpoint } from "../../../api/api"; import QrCodeScannerIcon from "@mui/icons-material/QrCodeScanner"; -import { ScannedTextType, TextType } from "../../../utils/types"; -import ScannerTutorial from "./ScannerTutorial"; -import ScannerFeedback from "./ScannerFeedback"; -import ScannerModal from "./ScannerModal"; +import { AlertColor, Button } from "@mui/material"; import Box from "@mui/material/Box"; +import React, { useRef, useState } from "react"; + +import { addWithEndpoint } from "api/api"; +import ScannerFeedback from "components/matches/Scanner/ScannerFeedback"; +import ScannerModal from "components/matches/Scanner/ScannerModal"; +import ScannerTutorial from "components/matches/Scanner/ScannerTutorial"; +import { ScannedTextType, TextType } from "utils/types"; function determineScannedTextType(scannedText: string): ScannedTextType { if (Number.isNaN(Number(scannedText))) { @@ -53,7 +54,7 @@ const Scanner = ({ forceUpdate }: { forceUpdate: () => void }) => { if (scannedTextType === TextType.ISBN) { displayFeedback( "Feil strekkode. Bruk bokas unike ID. Se instruksjoner for hjelp", - "error" + "error", ); return false; } @@ -61,7 +62,7 @@ const Scanner = ({ forceUpdate }: { forceUpdate: () => void }) => { if (scannedTextType === TextType.UNKNOWN) { displayFeedback( "Ugyldig strekkode. Vennligst prøv igjen, eller ta kontakt med stand for hjelp", - "error" + "error", ); return false; } @@ -74,12 +75,12 @@ const Scanner = ({ forceUpdate }: { forceUpdate: () => void }) => { const response = await addWithEndpoint( "matches", "transfer-item", - JSON.stringify({ blid: scannedText }) + JSON.stringify({ blid: scannedText }), ); const feedback = response.data?.data?.[0]?.feedback; displayFeedback( feedback ?? "Boken har blitt registrert!", - feedback ? "info" : "success" + feedback ? "info" : "success", ); // setManualRegistrationModalOpen(false); setScanModalOpen(false); diff --git a/src/components/matches/Scanner/ScannerFeedback.tsx b/src/components/matches/Scanner/ScannerFeedback.tsx index 2473153..460b7df 100644 --- a/src/components/matches/Scanner/ScannerFeedback.tsx +++ b/src/components/matches/Scanner/ScannerFeedback.tsx @@ -14,7 +14,7 @@ const ScannerFeedback = ({ }) => { const autoClose = ( _event?: React.SyntheticEvent | Event, - reason?: string + reason?: string, ) => { if (reason === "clickaway") { return; diff --git a/src/components/matches/Scanner/ScannerModal.tsx b/src/components/matches/Scanner/ScannerModal.tsx index a37bc84..dedded9 100644 --- a/src/components/matches/Scanner/ScannerModal.tsx +++ b/src/components/matches/Scanner/ScannerModal.tsx @@ -1,7 +1,8 @@ +import CropFreeIcon from "@mui/icons-material/CropFree"; import { Box, Button, Container, Modal, Typography } from "@mui/material"; import React, { useCallback } from "react"; -import CropFreeIcon from "@mui/icons-material/CropFree"; -import BarcodeQrScanner from "../BarcodeQrScanner"; + +import BarcodeQrScanner from "components/matches/BarcodeQrScanner"; const ScannerModal = ({ open, diff --git a/src/components/matches/Scanner/ScannerTutorial.tsx b/src/components/matches/Scanner/ScannerTutorial.tsx index ee08ee8..c8832aa 100644 --- a/src/components/matches/Scanner/ScannerTutorial.tsx +++ b/src/components/matches/Scanner/ScannerTutorial.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import QuestionMarkIcon from "@mui/icons-material/QuestionMark"; import { Button, Card, @@ -7,9 +7,9 @@ import { Paper, Typography, } from "@mui/material"; -import QuestionMarkIcon from "@mui/icons-material/QuestionMark"; -import Image from "next/image"; import { Box } from "@mui/system"; +import Image from "next/image"; +import React, { useState } from "react"; const ScannerTutorial = () => { const [tutorialOpen, setTutorialOpen] = useState(false); diff --git a/src/components/matches/StandMatchDetail.tsx b/src/components/matches/StandMatchDetail.tsx index de40d6a..5123bf2 100644 --- a/src/components/matches/StandMatchDetail.tsx +++ b/src/components/matches/StandMatchDetail.tsx @@ -1,16 +1,17 @@ import { Alert } from "@mui/material"; import React from "react"; -import { StandMatchWithDetails } from "../../utils/types"; + import { calculateFulfilledStandMatchItems, calculateItemStatuses, ItemStatus, MatchHeader, -} from "./matches-helper"; -import ProgressBar from "./matchesList/ProgressBar"; -import MeetingInfo from "./MeetingInfo"; -import MatchItemTable from "./MatchItemTable"; -import OtherPersonContact from "./OtherPersonContact"; +} from "components/matches/matches-helper"; +import ProgressBar from "components/matches/matchesList/ProgressBar"; +import MatchItemTable from "components/matches/MatchItemTable"; +import MeetingInfo from "components/matches/MeetingInfo"; +import OtherPersonContact from "components/matches/OtherPersonContact"; +import { StandMatchWithDetails } from "utils/types"; const StandMatchDetail = ({ match, @@ -31,13 +32,14 @@ const StandMatchDetail = ({ handoffItemStatuses = calculateItemStatuses( match, (match) => match.expectedHandoffItems, - fulfilledHandoffItems + fulfilledHandoffItems, ); pickupItemStatuses = calculateItemStatuses( match, (match) => match.expectedPickupItems, - fulfilledPickupItems + fulfilledPickupItems, ); + // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (error: any) { return En feil oppstod: {error?.message}; } diff --git a/src/components/matches/UserMatchDetail.tsx b/src/components/matches/UserMatchDetail.tsx index c3524d2..d8d48b3 100644 --- a/src/components/matches/UserMatchDetail.tsx +++ b/src/components/matches/UserMatchDetail.tsx @@ -1,17 +1,18 @@ import { Alert, Box, Typography } from "@mui/material"; import React, { useCallback, useState } from "react"; -import { UserMatchWithDetails } from "../../utils/types"; + import { calculateFulfilledUserMatchCustomerItems, calculateItemStatuses, ItemStatus, MatchHeader, -} from "./matches-helper"; -import ProgressBar from "./matchesList/ProgressBar"; -import MeetingInfo from "./MeetingInfo"; -import MatchItemTable from "./MatchItemTable"; -import OtherPersonContact from "./OtherPersonContact"; -import Scanner from "./Scanner/Scanner"; +} from "components/matches/matches-helper"; +import ProgressBar from "components/matches/matchesList/ProgressBar"; +import MatchItemTable from "components/matches/MatchItemTable"; +import MeetingInfo from "components/matches/MeetingInfo"; +import OtherPersonContact from "components/matches/OtherPersonContact"; +import Scanner from "components/matches/Scanner/Scanner"; +import { UserMatchWithDetails } from "utils/types"; const UserMatchDetail = ({ match, @@ -25,11 +26,11 @@ const UserMatchDetail = ({ const isSender = match.sender === currentUserId; const fulfilledItems = calculateFulfilledUserMatchCustomerItems( match, - isSender + isSender, ); const otherPersonFulfilledItems = calculateFulfilledUserMatchCustomerItems( match, - !isSender + !isSender, ); const isFulfilled = fulfilledItems.length >= match.expectedItems.length; @@ -38,8 +39,9 @@ const UserMatchDetail = ({ itemStatuses = calculateItemStatuses( match, (match) => match.expectedItems, - fulfilledItems + fulfilledItems, ); + // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (error: any) { return En feil oppstod: {error?.message}; } diff --git a/src/components/matches/matches-helper.tsx b/src/components/matches/matches-helper.tsx index 20e3ca2..e3887fa 100644 --- a/src/components/matches/matches-helper.tsx +++ b/src/components/matches/matches-helper.tsx @@ -1,7 +1,8 @@ -import React, { ReactNode } from "react"; -import { Typography } from "@mui/material"; import { Match, MatchVariant, MatchWithDetails } from "@boklisten/bl-model"; -import { StandMatchWithDetails, UserMatchWithDetails } from "../../utils/types"; +import { Typography } from "@mui/material"; +import React, { ReactNode } from "react"; + +import { StandMatchWithDetails, UserMatchWithDetails } from "utils/types"; export interface ItemStatus { id: string; @@ -18,29 +19,31 @@ export const MatchHeader = ({ children }: { children: ReactNode }) => { }; export function calculateFulfilledStandMatchItems( - match: StandMatchWithDetails + match: StandMatchWithDetails, ): { fulfilledHandoffItems: string[]; fulfilledPickupItems: string[]; } { const fulfilledHandoffItems = match.expectedHandoffItems.filter((item) => - match.deliveredItems.includes(item) + match.deliveredItems.includes(item), ); const fulfilledPickupItems = match.expectedPickupItems.filter((item) => - match.receivedItems.includes(item) + match.receivedItems.includes(item), ); return { fulfilledHandoffItems, fulfilledPickupItems }; } export function calculateFulfilledUserMatchCustomerItems( match: UserMatchWithDetails, - isSender: boolean + isSender: boolean, ): string[] { return match.expectedItems.filter((item) => (isSender ? match.deliveredCustomerItems : match.receivedCustomerItems - ).some((customerItem) => match.customerItemToItemMap[customerItem] === item) + ).some( + (customerItem) => match.customerItemToItemMap[customerItem] === item, + ), ); } @@ -49,7 +52,7 @@ export function calculateItemStatuses( // surpressing because it thinks "match" is an actual variable // eslint-disable-next-line no-unused-vars expectedItemsSelector: (match: T) => string[], - fulfilledItems: string[] + fulfilledItems: string[], ): ItemStatus[] { return expectedItemsSelector(match) .map((id) => { @@ -75,7 +78,7 @@ export function calculateItemStatuses( */ export function isMatchFulfilled( match: MatchWithDetails, - isSender: boolean + isSender: boolean, ): boolean { if (match._variant === MatchVariant.StandMatch) { const { fulfilledHandoffItems, fulfilledPickupItems } = @@ -101,7 +104,7 @@ export function isMatchFulfilled( */ export function isMatchBegun( match: MatchWithDetails, - isSender: boolean + isSender: boolean, ): boolean { if (match._variant === MatchVariant.StandMatch) { const { fulfilledHandoffItems, fulfilledPickupItems } = @@ -121,7 +124,7 @@ export function isMatchBegun( */ export function isUserSenderInMatch( match: Match, - currentUserId: string + currentUserId: string, ): boolean { if (match._variant === MatchVariant.UserMatch) { return match.sender === currentUserId; diff --git a/src/components/matches/matchesList/MatchListItemBox.tsx b/src/components/matches/matchesList/MatchListItemBox.tsx index 88e61c6..5d58e83 100644 --- a/src/components/matches/matchesList/MatchListItemBox.tsx +++ b/src/components/matches/matchesList/MatchListItemBox.tsx @@ -1,6 +1,7 @@ -import React, { PropsWithChildren } from "react"; import { Button, Card, CardActions, CardContent } from "@mui/material"; -import DynamicLink from "../../DynamicLink"; +import React, { PropsWithChildren } from "react"; + +import DynamicLink from "components/DynamicLink"; const MatchListItemBox: React.FC< PropsWithChildren<{ finished: boolean; matchId: string }> diff --git a/src/components/matches/matchesList/MatchListItemGroups.tsx b/src/components/matches/matchesList/MatchListItemGroups.tsx index 014ca20..8c25868 100644 --- a/src/components/matches/matchesList/MatchListItemGroups.tsx +++ b/src/components/matches/matchesList/MatchListItemGroups.tsx @@ -1,10 +1,15 @@ -import React from "react"; -import { formatDatetime, sectionStyle, getSortedMatchGroups } from "./helper"; -import { Typography } from "@mui/material"; import { MatchVariant, MatchWithDetails } from "@boklisten/bl-model"; -import StandMatchListItem from "./StandMatchListItem"; -import UserMatchListItem from "./UserMatchListItem"; -import { GroupedMatches } from "../../../utils/types"; +import { Typography } from "@mui/material"; +import React from "react"; + +import { + formatDatetime, + sectionStyle, + getSortedMatchGroups, +} from "components/matches/matchesList/helper"; +import StandMatchListItem from "components/matches/matchesList/StandMatchListItem"; +import UserMatchListItem from "components/matches/matchesList/UserMatchListItem"; +import { GroupedMatches } from "utils/types"; export const MatchListItemGroups: React.FC<{ groups: GroupedMatches; @@ -36,7 +41,7 @@ export const MatchListItemGroups: React.FC<{ match={match} currentUserId={userId} /> - ) + ), )} ); diff --git a/src/components/matches/matchesList/MatchesList.tsx b/src/components/matches/matchesList/MatchesList.tsx index a982daf..9a4986d 100644 --- a/src/components/matches/matchesList/MatchesList.tsx +++ b/src/components/matches/matchesList/MatchesList.tsx @@ -1,22 +1,23 @@ -import useSWR from "swr"; -import BL_CONFIG from "../../../utils/bl-config"; -import React from "react"; -import { apiFetcher } from "api/api"; -import { getAccessTokenBody } from "../../../api/token"; -import { groupMatchesByTimeAndLocation } from "./helper"; import { MatchVariant, MatchWithDetails } from "@boklisten/bl-model"; -import { MatchListItemGroups } from "./MatchListItemGroups"; -import ProgressBar from "./ProgressBar"; import { Alert, Skeleton } from "@mui/material"; +import React from "react"; +import useSWR from "swr"; + +import { apiFetcher } from "api/api"; +import { getAccessTokenBody } from "api/token"; import { - StandMatchWithDetails, - UserMatchWithDetails, -} from "../../../utils/types"; -import { isMatchFulfilled, isUserSenderInMatch } from "../matches-helper"; + isMatchFulfilled, + isUserSenderInMatch, +} from "components/matches/matches-helper"; +import { groupMatchesByTimeAndLocation } from "components/matches/matchesList/helper"; +import { MatchListItemGroups } from "components/matches/matchesList/MatchListItemGroups"; +import ProgressBar from "components/matches/matchesList/ProgressBar"; +import BL_CONFIG from "utils/bl-config"; +import { StandMatchWithDetails, UserMatchWithDetails } from "utils/types"; export const MatchesList: React.FC = () => { const { data: accessToken, error: tokenError } = useSWR("userId", () => - getAccessTokenBody() + getAccessTokenBody(), ); const userId = accessToken?.details; const { data: matches, error: matchesError } = useSWR( @@ -25,7 +26,7 @@ export const MatchesList: React.FC = () => { // WebStorm accepts it wrapped in parentheses, but then prettier doesn't, so // just ignore it. apiFetcher, - { refreshInterval: 5000 } + { refreshInterval: 5000 }, ); if (!userId || tokenError || matchesError) { @@ -40,7 +41,7 @@ export const MatchesList: React.FC = () => { .filter((match) => match._variant === MatchVariant.StandMatch) .map((standMatch) => standMatch as StandMatchWithDetails) .sort((a, b) => - isMatchFulfilled(a, false) ? 1 : isMatchFulfilled(b, false) ? -1 : 0 + isMatchFulfilled(a, false) ? 1 : isMatchFulfilled(b, false) ? -1 : 0, ); const userMatches = matches .filter((match) => match._variant === MatchVariant.UserMatch) @@ -50,7 +51,7 @@ export const MatchesList: React.FC = () => { ? 1 : isMatchFulfilled(b, isUserSenderInMatch(b, userId)) ? -1 - : 0 + : 0, ); const standMatchesByTime = groupMatchesByTimeAndLocation(standMatches); const userMatchesByTime = groupMatchesByTimeAndLocation(userMatches); @@ -60,7 +61,7 @@ export const MatchesList: React.FC = () => { } const numberFulfilledMatches = matches.filter((element) => - isMatchFulfilled(element, isUserSenderInMatch(element, userId)) + isMatchFulfilled(element, isUserSenderInMatch(element, userId)), ).length; return ( diff --git a/src/components/matches/matchesList/ProgressBar.tsx b/src/components/matches/matchesList/ProgressBar.tsx index b1a3027..d35cf1a 100644 --- a/src/components/matches/matchesList/ProgressBar.tsx +++ b/src/components/matches/matchesList/ProgressBar.tsx @@ -1,7 +1,8 @@ -import React, { ReactElement } from "react"; import { CheckCircle } from "@mui/icons-material"; import { Box, LinearProgress, linearProgressClasses } from "@mui/material"; -import theme from "../../../utils/theme"; +import React, { ReactElement } from "react"; + +import theme from "utils/theme"; const ProgressBar: React.FC<{ percentComplete: number; diff --git a/src/components/matches/matchesList/StandMatchListItem.tsx b/src/components/matches/matchesList/StandMatchListItem.tsx index 2f8d7b6..33c6c0f 100644 --- a/src/components/matches/matchesList/StandMatchListItem.tsx +++ b/src/components/matches/matchesList/StandMatchListItem.tsx @@ -1,13 +1,14 @@ import { Box } from "@mui/material"; import React from "react"; -import { formatActionsString } from "./helper"; -import MatchListItemBox from "./MatchListItemBox"; -import ProgressBar from "./ProgressBar"; + import { calculateFulfilledStandMatchItems, isMatchBegun, isMatchFulfilled, -} from "../matches-helper"; +} from "components/matches/matches-helper"; +import { formatActionsString } from "components/matches/matchesList/helper"; +import MatchListItemBox from "components/matches/matchesList/MatchListItemBox"; +import ProgressBar from "components/matches/matchesList/ProgressBar"; import { StandMatchWithDetails } from "utils/types"; const StandMatchListItem: React.FC<{ diff --git a/src/components/matches/matchesList/UserMatchListItem.tsx b/src/components/matches/matchesList/UserMatchListItem.tsx index 2ea1f05..ab9b703 100644 --- a/src/components/matches/matchesList/UserMatchListItem.tsx +++ b/src/components/matches/matchesList/UserMatchListItem.tsx @@ -1,16 +1,17 @@ -import React from "react"; -import { formatActionsString } from "./helper"; -import MatchListItemBox from "./MatchListItemBox"; -import { Box, Typography } from "@mui/material"; import { KeyboardDoubleArrowRight } from "@mui/icons-material"; -import ProgressBar from "./ProgressBar"; -import { UserMatchWithDetails } from "../../../utils/types"; +import { Box, Typography } from "@mui/material"; +import React from "react"; + import { calculateFulfilledUserMatchCustomerItems, isMatchBegun, isMatchFulfilled, isUserSenderInMatch, -} from "../matches-helper"; +} from "components/matches/matches-helper"; +import { formatActionsString } from "components/matches/matchesList/helper"; +import MatchListItemBox from "components/matches/matchesList/MatchListItemBox"; +import ProgressBar from "components/matches/matchesList/ProgressBar"; +import { UserMatchWithDetails } from "utils/types"; const me = Meg; @@ -24,7 +25,7 @@ const UserMatchListItem: React.FC<{ const isFulfilled = isMatchFulfilled(match, isSender); const fulfilledItems = calculateFulfilledUserMatchCustomerItems( match, - isSender + isSender, ); const HeaderLevel = "h4"; return ( @@ -65,7 +66,7 @@ const UserMatchListItem: React.FC<{ {formatActionsString( isSender ? numberItems : 0, - isSender ? 0 : numberItems + isSender ? 0 : numberItems, )} diff --git a/src/components/matches/matchesList/helper.tsx b/src/components/matches/matchesList/helper.tsx index 9b83899..22a0f9a 100644 --- a/src/components/matches/matchesList/helper.tsx +++ b/src/components/matches/matchesList/helper.tsx @@ -1,6 +1,7 @@ import { MatchWithDetails } from "@boklisten/bl-model"; import { Properties } from "csstype"; -import { GroupedMatches } from "../../../utils/types"; + +import { GroupedMatches } from "utils/types"; export const sectionStyle: Properties = { display: "flex", @@ -51,7 +52,7 @@ export function formatActionsString(handoffItems: number, pickupItems: number) { * @param matches the matches to group */ export function groupMatchesByTimeAndLocation( - matches: T[] + matches: T[], ): GroupedMatches { const keyToData: Map = new Map(); @@ -79,7 +80,7 @@ export function groupMatchesByTimeAndLocation( * @returns array of keys of groups */ export function getSortedMatchGroups( - groups: GroupedMatches + groups: GroupedMatches, ): string[] { const keys = [...groups.keyToData.keys()]; keys.sort((a, b) => { diff --git a/src/components/user/FacebookButton.tsx b/src/components/user/FacebookButton.tsx index e2e14f5..8390278 100644 --- a/src/components/user/FacebookButton.tsx +++ b/src/components/user/FacebookButton.tsx @@ -1,6 +1,7 @@ import FacebookRoundedIcon from "@mui/icons-material/FacebookRounded"; import React from "react"; -import SocialLoginButton from "./SocialLoginButton"; + +import SocialLoginButton from "components/user/SocialLoginButton"; const FacebookButton = ({ label }: { label: string }) => ( ( ( // eslint-disable-next-line unicorn/no-null - userDetails?.dob ? moment(userDetails.dob) : null + userDetails?.dob ? moment(userDetails.dob) : null, ); const defaultValues = { @@ -160,7 +157,6 @@ const UserDetailEditor = ({ data-testid="error-message" sx={{ marginY: 1 }} > - {/*@ts-ignore*/} {message.message} ))} @@ -176,7 +172,6 @@ const UserDetailEditor = ({ label="Epost" autoComplete="email" error={!!errors.email} - //@ts-ignore {...register("email", { required: "Du må fylle inn epost", validate: (v) => @@ -223,7 +218,7 @@ const UserDetailEditor = ({ aria-label="toggle password visibility" onClick={() => setShowPassword(!showPassword)} onMouseDown={( - event: React.MouseEvent + event: React.MouseEvent, ) => { event.preventDefault(); }} @@ -340,7 +335,7 @@ const UserDetailEditor = ({ const response = await fetchData( "/api/delivery/postal-code", "POST", - event.target.value + event.target.value, ); setWaitingForPostalCity(false); @@ -362,7 +357,7 @@ const UserDetailEditor = ({ const response = await fetchData( "/api/delivery/postal-code", "POST", - v + v, ); if (!response.postalCity) { diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 0865aee..65ba07a 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,26 +1,27 @@ -import * as React from "react"; -import Head from "next/head"; -import { ThemeProvider } from "@mui/material/styles"; -import CssBaseline from "@mui/material/CssBaseline"; -import theme from "../utils/theme"; -import { AppProps } from "next/dist/shared/lib/router/router"; -import NavBar from "../components/NavBar"; -import "@fontsource/roboto/300.css"; -import "@fontsource/roboto/400.css"; -import "@fontsource/roboto/500.css"; -import "@fontsource/roboto/700.css"; import { Container } from "@mui/material"; +import CssBaseline from "@mui/material/CssBaseline"; +import { ThemeProvider } from "@mui/material/styles"; import { Box } from "@mui/system"; -import Footer from "components/Footer"; +import { LocalizationProvider } from "@mui/x-date-pickers"; import { AdapterMoment as DateAdapter } from "@mui/x-date-pickers/AdapterMoment"; import { Moment } from "moment"; +import { AppProps } from "next/dist/shared/lib/router/router"; +import Head from "next/head"; +import { useRouter } from "next/router"; +import * as React from "react"; +import { useEffect } from "react"; import { Provider } from "react-redux"; + +import { addAccessToken, addRefreshToken } from "api/token"; +import Footer from "components/Footer"; +import NavBar from "components/NavBar"; import store from "redux/store"; -import { LocalizationProvider } from "@mui/x-date-pickers"; +import theme from "utils/theme"; import "@mui/lab"; -import { useRouter } from "next/router"; -import { useEffect } from "react"; -import { addAccessToken, addRefreshToken } from "../api/token"; +import "@fontsource/roboto/300.css"; +import "@fontsource/roboto/400.css"; +import "@fontsource/roboto/500.css"; +import "@fontsource/roboto/700.css"; class OverriddenAdapter extends DateAdapter { // Get years in decending order diff --git a/src/pages/api/delivery/postal-code.ts b/src/pages/api/delivery/postal-code.ts index 811d6a1..f2b7c33 100644 --- a/src/pages/api/delivery/postal-code.ts +++ b/src/pages/api/delivery/postal-code.ts @@ -2,7 +2,7 @@ import type { NextApiRequest, NextApiResponse } from "next"; const PostalCode = async ( request: NextApiRequest, - response: NextApiResponse + response: NextApiResponse, ) => { if (!process.env["BRING_API_ID"] || !process.env["BRING_API_KEY"]) { throw new Error("Bring API env variables are undefined"); @@ -17,7 +17,7 @@ const PostalCode = async ( try { const postalLookupResult = await fetch( `https://api.bring.com/pickuppoint/api/postalCode/NO/getCityAndType/${request.body}.json`, - { method: "GET", headers: bringHeaders } + { method: "GET", headers: bringHeaders }, ); result = await postalLookupResult.json(); } catch (error) { diff --git a/src/pages/auth/forgot.tsx b/src/pages/auth/forgot.tsx index 6ad698a..5df1751 100644 --- a/src/pages/auth/forgot.tsx +++ b/src/pages/auth/forgot.tsx @@ -11,11 +11,12 @@ import { import type { NextPage } from "next"; import Head from "next/head"; import Image from "next/image"; +import { useState } from "react"; import { SubmitHandler, useForm } from "react-hook-form"; import isEmail from "validator/lib/isEmail"; -import { add } from "../../api/api"; -import { useState } from "react"; -import DynamicLink from "../../components/DynamicLink"; + +import { add } from "api/api"; +import DynamicLink from "components/DynamicLink"; type ForgotFields = { email: string; diff --git a/src/pages/auth/login.tsx b/src/pages/auth/login.tsx index e7539eb..9a50923 100644 --- a/src/pages/auth/login.tsx +++ b/src/pages/auth/login.tsx @@ -1,8 +1,9 @@ import { Card } from "@mui/material"; -import SignIn from "components/user/SignIn"; import type { NextPage } from "next"; import Head from "next/head"; +import SignIn from "components/user/SignIn"; + const Login: NextPage = () => { return ( <> diff --git a/src/pages/auth/register.tsx b/src/pages/auth/register.tsx index 53f6f7c..ed15934 100644 --- a/src/pages/auth/register.tsx +++ b/src/pages/auth/register.tsx @@ -1,8 +1,9 @@ import { Card } from "@mui/material"; -import UserDetailEditor from "components/user/UserDetailEditor"; import type { NextPage } from "next"; import Head from "next/head"; +import UserDetailEditor from "components/user/UserDetailEditor"; + const Register: NextPage = () => { return ( <> diff --git a/src/pages/cart.tsx b/src/pages/cart.tsx index b54a121..ecc6af6 100644 --- a/src/pages/cart.tsx +++ b/src/pages/cart.tsx @@ -1,8 +1,9 @@ import { Card } from "@mui/material"; +import Typography from "@mui/material/Typography"; import type { NextPage } from "next"; import Head from "next/head"; -import Typography from "@mui/material/Typography"; -import Cart from "../components/cart/Cart"; + +import Cart from "components/cart/Cart"; const CartPage: NextPage = () => { return ( diff --git a/src/pages/checkout.tsx b/src/pages/checkout.tsx index 5aecf1b..917c028 100644 --- a/src/pages/checkout.tsx +++ b/src/pages/checkout.tsx @@ -1,15 +1,16 @@ +import { Order } from "@boklisten/bl-model"; +import { Card } from "@mui/material"; import type { NextPage } from "next"; import Head from "next/head"; -import { Card } from "@mui/material"; -import CheckoutStepper from "../components/checkout/CheckoutStepper"; -import { useEffect } from "react"; -import { useAppDispatch, useAppSelector } from "../redux/hooks"; -import { selectCartItems, setOrderID } from "../redux/cart"; -import { add } from "../api/api"; -import { createOrder } from "../utils/cartUtils"; -import { selectBranch } from "../redux/selectedBranch"; -import { Order } from "@boklisten/bl-model"; import { useRouter } from "next/router"; +import { useEffect } from "react"; + +import { add } from "api/api"; +import CheckoutStepper from "components/checkout/CheckoutStepper"; +import { selectCartItems, setOrderID } from "redux/cart"; +import { useAppDispatch, useAppSelector } from "redux/hooks"; +import { selectBranch } from "redux/selectedBranch"; +import { createOrder } from "utils/cartUtils"; const CartPage: NextPage = () => { const cartItems = useAppSelector(selectCartItems); @@ -25,7 +26,7 @@ const CartPage: NextPage = () => { const fetchOrder = async () => { const createdOrder: Order = await add( "orders", - createOrder(selectedBranch.id, cartItems) + createOrder(selectedBranch.id, cartItems), ).then((response) => response.data.data[0]); dispatch(setOrderID(createdOrder.id)); }; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 2d3aed0..120e16b 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -2,7 +2,8 @@ import { Box, Typography } from "@mui/material"; import type { NextPage } from "next"; import Head from "next/head"; import Image from "next/image"; -import DynamicLink from "../components/DynamicLink"; + +import DynamicLink from "components/DynamicLink"; const Home: NextPage = () => { return ( diff --git a/src/pages/info/about.tsx b/src/pages/info/about.tsx index 35aacc5..53918d4 100644 --- a/src/pages/info/about.tsx +++ b/src/pages/info/about.tsx @@ -1,10 +1,11 @@ import { Card } from "@mui/material"; import type { NextPage } from "next"; -import DynamicNav from "../../components/info/DynamicNav"; -import { infoPageTabs } from "../../utils/constants"; import Head from "next/head"; -import Editor from "../../components/info/Editor"; -import { editorData } from "../../utils/mockData"; + +import DynamicNav from "components/info/DynamicNav"; +import Editor from "components/info/Editor"; +import { infoPageTabs } from "utils/constants"; +import { editorData } from "utils/mockData"; const About: NextPage = () => { return ( diff --git a/src/pages/info/branch/[branchId].tsx b/src/pages/info/branch/[branchId].tsx index e9b6d72..3ed3197 100644 --- a/src/pages/info/branch/[branchId].tsx +++ b/src/pages/info/branch/[branchId].tsx @@ -1,19 +1,20 @@ +import { Branch, OpeningHour } from "@boklisten/bl-model"; import { Alert, Card, Typography } from "@mui/material"; +import { Box } from "@mui/system"; +import moment from "moment"; import type { NextPage } from "next"; -import DynamicNav from "../../../components/info/DynamicNav"; -import { infoPageTabs } from "../../../utils/constants"; import Head from "next/head"; +import { useRouter } from "next/router"; + import { fetcher } from "api/requests"; +import BranchSelect from "components/BranchSelect"; import BranchInfo from "components/info/BranchInfo"; -import BL_CONFIG from "utils/bl-config"; -import { useRouter } from "next/router"; -import { Branch, OpeningHour } from "@boklisten/bl-model"; import ContactInfo from "components/info/ContactInfo"; -import BranchSelect from "components/BranchSelect"; -import { Box } from "@mui/system"; -import { selectBranch } from "redux/selectedBranch"; +import DynamicNav from "components/info/DynamicNav"; import { useAppSelector } from "redux/hooks"; -import moment from "moment"; +import { selectBranch } from "redux/selectedBranch"; +import BL_CONFIG from "utils/bl-config"; +import { infoPageTabs } from "utils/constants"; export const getStaticPaths = async () => { const branchesUrl = `${BL_CONFIG.api.basePath}branches?og=id&active=true`; diff --git a/src/pages/info/buyback.tsx b/src/pages/info/buyback.tsx index a583952..ccb0e54 100644 --- a/src/pages/info/buyback.tsx +++ b/src/pages/info/buyback.tsx @@ -1,11 +1,12 @@ import { Card } from "@mui/material"; import type { NextPage } from "next"; -import DynamicNav from "../../components/info/DynamicNav"; -import { infoPageTabs } from "../../utils/constants"; import Head from "next/head"; -import BuybackList, { buybackUrl } from "components/info/BuybackList"; import { SWRConfig } from "swr"; + import { fetcher } from "api/requests"; +import BuybackList, { buybackUrl } from "components/info/BuybackList"; +import DynamicNav from "components/info/DynamicNav"; +import { infoPageTabs } from "utils/constants"; import { Item } from "utils/types"; export const getStaticProps = async () => { diff --git a/src/pages/info/companies.tsx b/src/pages/info/companies.tsx index c4bc605..dfa08f7 100644 --- a/src/pages/info/companies.tsx +++ b/src/pages/info/companies.tsx @@ -1,10 +1,11 @@ import { Card } from "@mui/material"; import type { NextPage } from "next"; -import DynamicNav from "../../components/info/DynamicNav"; -import { infoPageTabs } from "../../utils/constants"; import Head from "next/head"; -import Editor from "../../components/info/Editor"; -import { editorData } from "../../utils/mockData"; + +import DynamicNav from "components/info/DynamicNav"; +import Editor from "components/info/Editor"; +import { infoPageTabs } from "utils/constants"; +import { editorData } from "utils/mockData"; const Companies: NextPage = () => { return ( diff --git a/src/pages/info/contact.tsx b/src/pages/info/contact.tsx index 78cca68..34bb1f6 100644 --- a/src/pages/info/contact.tsx +++ b/src/pages/info/contact.tsx @@ -1,9 +1,10 @@ import { Card, Typography } from "@mui/material"; import type { NextPage } from "next"; -import DynamicNav from "../../components/info/DynamicNav"; -import { infoPageTabs } from "../../utils/constants"; import Head from "next/head"; + import ContactInfo from "components/info/ContactInfo"; +import DynamicNav from "components/info/DynamicNav"; +import { infoPageTabs } from "utils/constants"; const Contact: NextPage = () => { return ( diff --git a/src/pages/info/faq.tsx b/src/pages/info/faq.tsx index 85e74cd..ac9011d 100644 --- a/src/pages/info/faq.tsx +++ b/src/pages/info/faq.tsx @@ -1,9 +1,10 @@ import { Card } from "@mui/material"; import type { NextPage } from "next"; -import DynamicNav from "../../components/info/DynamicNav"; -import { infoPageTabs } from "../../utils/constants"; import Head from "next/head"; + +import DynamicNav from "components/info/DynamicNav"; import EditableQNA from "components/info/EditableQna"; +import { infoPageTabs } from "utils/constants"; import { QNAs } from "utils/mockData"; const FAQ: NextPage = () => { diff --git a/src/pages/info/general.tsx b/src/pages/info/general.tsx index 9972df1..4f4f7d7 100644 --- a/src/pages/info/general.tsx +++ b/src/pages/info/general.tsx @@ -1,10 +1,11 @@ import { Card } from "@mui/material"; import type { NextPage } from "next"; -import DynamicNav from "../../components/info/DynamicNav"; -import { infoPageTabs } from "../../utils/constants"; import Head from "next/head"; -import Editor from "../../components/info/Editor"; -import { editorData } from "../../utils/mockData"; + +import DynamicNav from "components/info/DynamicNav"; +import Editor from "components/info/Editor"; +import { infoPageTabs } from "utils/constants"; +import { editorData } from "utils/mockData"; const General: NextPage = () => { return ( diff --git a/src/pages/info/policies/conditions.tsx b/src/pages/info/policies/conditions.tsx index 4717dea..39d7a44 100644 --- a/src/pages/info/policies/conditions.tsx +++ b/src/pages/info/policies/conditions.tsx @@ -1,11 +1,12 @@ import { Card } from "@mui/material"; import type { NextPage } from "next"; -import DynamicNav from "../../../components/info/DynamicNav"; -import { infoPageTabs, termsAndConditionsTabs } from "../../../utils/constants"; import Head from "next/head"; -import Editor from "../../../components/info/Editor"; -import { editorData } from "../../../utils/mockData"; -import DynamicSubNav from "../../../components/info/DynamicSubNav"; + +import DynamicNav from "components/info/DynamicNav"; +import DynamicSubNav from "components/info/DynamicSubNav"; +import Editor from "components/info/Editor"; +import { infoPageTabs, termsAndConditionsTabs } from "utils/constants"; +import { editorData } from "utils/mockData"; const Policies: NextPage = () => { return ( diff --git a/src/pages/info/policies/privacy.tsx b/src/pages/info/policies/privacy.tsx index b68000d..64933b0 100644 --- a/src/pages/info/policies/privacy.tsx +++ b/src/pages/info/policies/privacy.tsx @@ -1,11 +1,12 @@ import { Card } from "@mui/material"; import type { NextPage } from "next"; -import DynamicNav from "../../../components/info/DynamicNav"; -import { infoPageTabs, termsAndConditionsTabs } from "../../../utils/constants"; import Head from "next/head"; -import Editor from "../../../components/info/Editor"; -import { editorData } from "../../../utils/mockData"; -import DynamicSubNav from "../../../components/info/DynamicSubNav"; + +import DynamicNav from "components/info/DynamicNav"; +import DynamicSubNav from "components/info/DynamicSubNav"; +import Editor from "components/info/Editor"; +import { infoPageTabs, termsAndConditionsTabs } from "utils/constants"; +import { editorData } from "utils/mockData"; const Terms: NextPage = () => { return ( diff --git a/src/pages/info/policies/terms.tsx b/src/pages/info/policies/terms.tsx index 1a86b30..dad9f19 100644 --- a/src/pages/info/policies/terms.tsx +++ b/src/pages/info/policies/terms.tsx @@ -1,11 +1,12 @@ import { Card } from "@mui/material"; import type { NextPage } from "next"; -import DynamicNav from "../../../components/info/DynamicNav"; -import { infoPageTabs, termsAndConditionsTabs } from "../../../utils/constants"; import Head from "next/head"; -import Editor from "../../../components/info/Editor"; -import { editorData } from "../../../utils/mockData"; -import DynamicSubNav from "../../../components/info/DynamicSubNav"; + +import DynamicNav from "components/info/DynamicNav"; +import DynamicSubNav from "components/info/DynamicSubNav"; +import Editor from "components/info/Editor"; +import { infoPageTabs, termsAndConditionsTabs } from "utils/constants"; +import { editorData } from "utils/mockData"; const Terms: NextPage = () => { return ( diff --git a/src/pages/info/pupils.tsx b/src/pages/info/pupils.tsx index 8cba80c..5eb0bc8 100644 --- a/src/pages/info/pupils.tsx +++ b/src/pages/info/pupils.tsx @@ -1,10 +1,11 @@ import { Card } from "@mui/material"; import type { NextPage } from "next"; -import DynamicNav from "../../components/info/DynamicNav"; -import { infoPageTabs } from "../../utils/constants"; import Head from "next/head"; -import Editor from "../../components/info/Editor"; -import { editorData } from "../../utils/mockData"; + +import DynamicNav from "components/info/DynamicNav"; +import Editor from "components/info/Editor"; +import { infoPageTabs } from "utils/constants"; +import { editorData } from "utils/mockData"; const Pupils: NextPage = () => { return ( diff --git a/src/pages/matches/[matchId].tsx b/src/pages/matches/[matchId].tsx index d6cc314..6877f35 100644 --- a/src/pages/matches/[matchId].tsx +++ b/src/pages/matches/[matchId].tsx @@ -1,8 +1,9 @@ -import MatchDetail from "components/matches/MatchDetail"; import { NextPage } from "next"; import Head from "next/head"; import React from "react"; +import MatchDetail from "components/matches/MatchDetail"; + export async function getServerSideProps({ params, }: { diff --git a/src/pages/matches/index.tsx b/src/pages/matches/index.tsx index 4c449b2..64af81b 100644 --- a/src/pages/matches/index.tsx +++ b/src/pages/matches/index.tsx @@ -1,12 +1,13 @@ +import { Alert, Typography } from "@mui/material"; +import Button from "@mui/material/Button"; import { NextPage } from "next"; import Head from "next/head"; -import { MatchesList } from "../../components/matches/matchesList/MatchesList"; import React, { useEffect, useState } from "react"; -import { Alert, Typography } from "@mui/material"; -import { isLoggedIn } from "../../api/auth"; -import Button from "@mui/material/Button"; -import DynamicLink from "../../components/DynamicLink"; -import BL_CONFIG from "../../utils/bl-config"; + +import { isLoggedIn } from "api/auth"; +import DynamicLink from "components/DynamicLink"; +import { MatchesList } from "components/matches/matchesList/MatchesList"; +import BL_CONFIG from "utils/bl-config"; const MatchesPage: NextPage = () => { const [hydrated, setHydrated] = useState(false); diff --git a/src/pages/order.tsx b/src/pages/order.tsx index aaf6d4c..3dc21ae 100644 --- a/src/pages/order.tsx +++ b/src/pages/order.tsx @@ -1,14 +1,15 @@ -import React, { useEffect, useState } from "react"; +import { BranchItem } from "@boklisten/bl-model"; import { Card } from "@mui/material"; +import Typography from "@mui/material/Typography"; import type { NextPage } from "next"; import Head from "next/head"; +import React, { useEffect, useState } from "react"; + import { get } from "api/api"; -import { BranchItem } from "@boklisten/bl-model"; -import { useAppSelector } from "../redux/hooks"; -import { selectBranch } from "../redux/selectedBranch"; -import BranchSelect from "../components/BranchSelect"; -import Typography from "@mui/material/Typography"; -import SubjectSelect from "../components/SubjectSelect"; +import BranchSelect from "components/BranchSelect"; +import SubjectSelect from "components/SubjectSelect"; +import { useAppSelector } from "redux/hooks"; +import { selectBranch } from "redux/selectedBranch"; const Orders: NextPage = () => { const selectedBranch = useAppSelector(selectBranch); diff --git a/src/pages/users/me/items.tsx b/src/pages/users/me/items.tsx index 012e425..e03220a 100644 --- a/src/pages/users/me/items.tsx +++ b/src/pages/users/me/items.tsx @@ -1,16 +1,17 @@ -import React, { useEffect, useState } from "react"; +import { Branch, CustomerItem, Item } from "@boklisten/bl-model"; import { Card, Container, Skeleton, Typography } from "@mui/material"; +import Box from "@mui/material/Box"; import type { NextPage } from "next"; import Head from "next/head"; +import React, { useEffect, useState } from "react"; + import { get } from "api/api"; +import { fetcher } from "api/requests"; import { getAccessTokenBody } from "api/token"; -import { Branch, CustomerItem, Item } from "@boklisten/bl-model"; -import CustomerItemOverview from "../../../components/CustomerItemOverview"; -import { useAppSelector } from "../../../redux/hooks"; -import { selectBranch } from "../../../redux/selectedBranch"; -import { branchListUrl } from "../../../components/BranchSelect"; -import { fetcher } from "../../../api/requests"; -import Box from "@mui/material/Box"; +import { branchListUrl } from "components/BranchSelect"; +import CustomerItemOverview from "components/CustomerItemOverview"; +import { useAppSelector } from "redux/hooks"; +import { selectBranch } from "redux/selectedBranch"; const Orders: NextPage = () => { const [customerItems, setCustomerItems] = useState(); @@ -35,7 +36,7 @@ const Orders: NextPage = () => { const data = await get(`items/${customerItem.item}`); customerItem.item = data.data.data[0] as Item; return customerItem; - }) + }), ); setBranchNames(branchNames); diff --git a/src/pages/users/me/orders.tsx b/src/pages/users/me/orders.tsx index dcb46af..19bdef4 100644 --- a/src/pages/users/me/orders.tsx +++ b/src/pages/users/me/orders.tsx @@ -1,11 +1,12 @@ -import React, { useEffect, useState } from "react"; +import { Order } from "@boklisten/bl-model"; import { Card } from "@mui/material"; import type { NextPage } from "next"; import Head from "next/head"; +import React, { useEffect, useState } from "react"; + import { get } from "api/api"; import { getAccessTokenBody } from "api/token"; -import OrderHistory from "../../../components/OrderHistory"; -import { Order } from "@boklisten/bl-model"; +import OrderHistory from "components/OrderHistory"; const Orders: NextPage = () => { const [orders, setOrders] = useState(); diff --git a/src/pages/users/me/settings.tsx b/src/pages/users/me/settings.tsx index f880691..a2ab9fa 100644 --- a/src/pages/users/me/settings.tsx +++ b/src/pages/users/me/settings.tsx @@ -1,10 +1,11 @@ -import { useEffect, useState } from "react"; import { Card } from "@mui/material"; -import UserDetailEditor from "components/user/UserDetailEditor"; import type { NextPage } from "next"; import Head from "next/head"; +import { useEffect, useState } from "react"; + import { get } from "api/api"; import { getAccessTokenBody } from "api/token"; +import UserDetailEditor from "components/user/UserDetailEditor"; const Register: NextPage = () => { const [userDetails, setUserDetails] = useState(); diff --git a/src/redux/cart.ts b/src/redux/cart.ts index d3d54e4..cb6cae8 100644 --- a/src/redux/cart.ts +++ b/src/redux/cart.ts @@ -1,6 +1,3 @@ -import { createSlice, current, PayloadAction } from "@reduxjs/toolkit"; - -import type { AppState } from "./store"; import { Branch, BranchItem, @@ -10,7 +7,10 @@ import { OrderItem, Period, } from "@boklisten/bl-model"; -import { createOrderItem } from "../utils/cartUtils"; +import { createSlice, current, PayloadAction } from "@reduxjs/toolkit"; + +import type { AppState } from "redux/store"; +import { createOrderItem } from "utils/cartUtils"; export interface CartItem { item: Item; @@ -38,7 +38,7 @@ export const cartSlice = createSlice({ reducers: { setCart: (state, action: PayloadAction) => { state.cartItems = action.payload.sort((a, b) => - a.item.title.localeCompare(b.item.title) + a.item.title.localeCompare(b.item.title), ); }, setOrderID: (state, action: PayloadAction) => { @@ -46,7 +46,7 @@ export const cartSlice = createSlice({ }, setDeliveryMethod: ( state, - action: PayloadAction + action: PayloadAction, ) => { state.deliveryMethod = action.payload; }, @@ -55,12 +55,12 @@ export const cartSlice = createSlice({ }, updatePeriod: ( state, - action: PayloadAction<{ cartItem: CartItem; updatedPeriod: Period }> + action: PayloadAction<{ cartItem: CartItem; updatedPeriod: Period }>, ) => { const cartItem = action.payload.cartItem; state.cartItems = [ ...current(state.cartItems).filter( - (item) => item.item.id !== cartItem.item.id + (item) => item.item.id !== cartItem.item.id, ), { ...cartItem, @@ -68,14 +68,14 @@ export const cartSlice = createSlice({ cartItem.branch, cartItem.item, cartItem.orderItem.type, - action.payload.updatedPeriod + action.payload.updatedPeriod, ), } as CartItem, ].sort((a, b) => a.item.title.localeCompare(b.item.title)); }, removeCartItem: (state, action: PayloadAction) => { state.cartItems = current(state.cartItems).filter( - (cartItem) => cartItem.item.id !== action.payload.item.id + (cartItem) => cartItem.item.id !== action.payload.item.id, ); }, }, diff --git a/src/redux/hooks.ts b/src/redux/hooks.ts index d2284c3..f6a99f8 100644 --- a/src/redux/hooks.ts +++ b/src/redux/hooks.ts @@ -1,5 +1,6 @@ import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux"; -import type { AppDispatch, AppState } from "./store"; + +import type { AppDispatch, AppState } from "redux/store"; // Use throughout your app instead of plain `useDispatch` and `useSelector` export const useAppDispatch = () => useDispatch(); diff --git a/src/redux/selectedBranch.ts b/src/redux/selectedBranch.ts index 998c7ec..dda3df9 100644 --- a/src/redux/selectedBranch.ts +++ b/src/redux/selectedBranch.ts @@ -1,6 +1,6 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; -import type { AppState } from "./store"; +import type { AppState } from "redux/store"; export interface SelectedBranchState { id: string; diff --git a/src/redux/selectedCustomerItemActions.ts b/src/redux/selectedCustomerItemActions.ts index 0c6a1d8..aabf383 100644 --- a/src/redux/selectedCustomerItemActions.ts +++ b/src/redux/selectedCustomerItemActions.ts @@ -1,7 +1,7 @@ +import { CustomerItem, OrderItemType } from "@boklisten/bl-model"; import { createSlice, PayloadAction } from "@reduxjs/toolkit"; -import type { AppState } from "./store"; -import { CustomerItem, OrderItemType } from "@boklisten/bl-model"; +import type { AppState } from "redux/store"; export interface CustomerItemAction { customerItem: CustomerItem; @@ -21,7 +21,7 @@ export const selectedCustomerItemActionsSlice = createSlice({ reducers: { setSelectedCustomerItemActions: ( state, - action: PayloadAction + action: PayloadAction, ) => { state.customerItemActions = action.payload; }, diff --git a/src/redux/selectedSubjects.ts b/src/redux/selectedSubjects.ts index 883c82f..42f737b 100644 --- a/src/redux/selectedSubjects.ts +++ b/src/redux/selectedSubjects.ts @@ -1,6 +1,6 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; -import type { AppState } from "./store"; +import type { AppState } from "redux/store"; export interface SelectedSubjectsState { subjects: string[]; diff --git a/src/redux/store.ts b/src/redux/store.ts index 8caf6c1..bf9cf37 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -1,9 +1,9 @@ import { configureStore, ThunkAction, Action } from "@reduxjs/toolkit"; -import selectedBranch from "./selectedBranch"; -import selectedSubjects from "./selectedSubjects"; -import cart from "./cart"; -import selectedCustomerItemActions from "./selectedCustomerItemActions"; +import cart from "redux/cart"; +import selectedBranch from "redux/selectedBranch"; +import selectedCustomerItemActions from "redux/selectedCustomerItemActions"; +import selectedSubjects from "redux/selectedSubjects"; export function makeStore() { return configureStore({ diff --git a/src/utils/cartUtils.ts b/src/utils/cartUtils.ts index 11ec9d2..85187c4 100644 --- a/src/utils/cartUtils.ts +++ b/src/utils/cartUtils.ts @@ -1,5 +1,3 @@ -import { CartItem } from "../redux/cart"; -import { get } from "../api/api"; import { Branch, BranchItem, @@ -10,36 +8,39 @@ import { OrderItemType, Period, } from "@boklisten/bl-model"; -import { CustomerItemAction } from "../redux/selectedCustomerItemActions"; -import { getAccessTokenBody } from "../api/token"; + +import { get } from "api/api"; +import { getAccessTokenBody } from "api/token"; +import { CartItem } from "redux/cart"; +import { CustomerItemAction } from "redux/selectedCustomerItemActions"; export const getExtendTime = (branchInfo: Branch) => ( branchInfo.paymentInfo?.extendPeriods.find( - (extendPeriod) => extendPeriod.type === "semester" + (extendPeriod) => extendPeriod.type === "semester", ) ?? { date: Date.now() } ).date; const getSelectedItems = (subjects: string[], branchItems: BranchItem[]) => branchItems.filter((branchItem) => - subjects.some((subject) => branchItem.categories?.includes(subject)) + subjects.some((subject) => branchItem.categories?.includes(subject)), ); export const getRentPeriodDate = ( branch: Branch, - period: Period + period: Period, ): Date | undefined => { return branch.paymentInfo?.rentPeriods.find( - (rentPeriod) => rentPeriod.type === period + (rentPeriod) => rentPeriod.type === period, )?.date; }; export const getPartlyPaymentPeriodDate = ( branch: Branch, - period: Period + period: Period, ): Date | undefined => { return branch.paymentInfo?.partlyPaymentPeriods?.find( - (partlyPaymentPeriod) => partlyPaymentPeriod.type === period + (partlyPaymentPeriod) => partlyPaymentPeriod.type === period, )?.date; }; @@ -58,16 +59,16 @@ const roundDown = (roundDownNumber: number): number => { const calculatePartlyPaymentAmountLeftToPay = ( branch: Branch, itemPrice: number, - period: Period + period: Period, ) => { if (!branch.paymentInfo?.partlyPaymentPeriods) { return -1; } - for (let partlyPaymentPeriod of branch.paymentInfo.partlyPaymentPeriods) { + for (const partlyPaymentPeriod of branch.paymentInfo.partlyPaymentPeriods) { if (partlyPaymentPeriod.type === period) { return sanitize( - roundDown(itemPrice * partlyPaymentPeriod.percentageBuyout) + roundDown(itemPrice * partlyPaymentPeriod.percentageBuyout), ); } } @@ -78,7 +79,7 @@ const calculatePriceBasedOnPeriodType = ( item: Item, branch: Branch, type: OrderItemType, - period: Period + period: Period, ): number => { if (branch.paymentInfo?.responsible) { return 0; @@ -103,7 +104,7 @@ const calculatePriceBasedOnPeriodType = ( } throw new Error( - `could not find price for item "${item.id}" for period "${period}"` + `could not find price for item "${item.id}" for period "${period}"`, ); }; @@ -115,11 +116,11 @@ const calculateItemUnitPrice = ( item: Item, branch: Branch, type: OrderItemType, - period: Period + period: Period, ): number => { if (type === "rent" || type === "partly-payment") { return sanitize( - calculatePriceBasedOnPeriodType(item, branch, type, period) + calculatePriceBasedOnPeriodType(item, branch, type, period), ); } else if (type === "buy") { return sanitize(calculateBuyPrice(item)); @@ -143,22 +144,19 @@ const calculateOrderItemAmount = (unitPrice: number, taxAmount: number) => { const calculateBuyoutPrice = ( customerItem: CustomerItem, item: Item, - branch: Branch + branch: Branch, ): number => { if (customerItem.type === "partly-payment") { return customerItem.amountLeftToPay; } - return roundDown( - // @ts-ignore - item.price * branch.paymentInfo.buyout.percentage - ); + return roundDown(item.price * (branch.paymentInfo?.buyout?.percentage ?? -1)); }; const calculateExtendPrice = ( item: Item, branch: Branch, - periodType: "semester" | "year" + periodType: "semester" | "year", ): number => { if (!branch?.paymentInfo) { return 50; @@ -174,7 +172,7 @@ const calculateExtendPrice = ( } throw new Error( - `could not find extend price for item "${item.id}" for period "${periodType}"` + `could not find extend price for item "${item.id}" for period "${periodType}"`, ); }; @@ -182,7 +180,7 @@ const calculateCustomerItemUnitPrice = ( customerItem: CustomerItem, item: Item, branch: Branch, - type: OrderItemType + type: OrderItemType, ) => { if (type === "extend") { return sanitize(calculateExtendPrice(item, branch, "semester")); @@ -194,7 +192,7 @@ const calculateCustomerItemUnitPrice = ( const calculateOrderItemPrices = ( unitPrice: number, - taxRate: number + taxRate: number, ): { amount: number; unitPrice: number; @@ -216,7 +214,7 @@ const calculateInfo = ( item: Item, orderItemType: OrderItemType, period: Period, - customerItem?: CustomerItem + customerItem?: CustomerItem, ) => { let info = {}; switch (orderItemType) { @@ -237,7 +235,7 @@ const calculateInfo = ( amountLeftToPay: calculatePartlyPaymentAmountLeftToPay( branch, item.price, - period + period, ), periodType: period, }; @@ -271,7 +269,7 @@ export const createOrder = (branchID: string, cartItems: CartItem[]): Order => { id: "", amount: cartItems.reduce( (previous, next) => previous + next.orderItem.amount, - 0 + 0, ), branch: branchID, customer: getAccessTokenBody().details, @@ -286,7 +284,7 @@ export const createOrderItem = ( item: Item, orderItemType: OrderItemType, period: Period, - customerItem?: CustomerItem + customerItem?: CustomerItem, ): OrderItem => { const info = calculateInfo(branch, item, orderItemType, period, customerItem); @@ -327,24 +325,25 @@ export const getOrderItemTypeFromBranch = (branch: Branch): OrderItemType => { export const generateCartItemsFromCustomerItemActions = async ( customerItemActions: CustomerItemAction[], - branchInfo: Branch + branchInfo: Branch, ): Promise => { const branchItems = await get(`branchitems`, `?branch=${branchInfo.id}`).then( - (response) => response.data.data as BranchItem[] + (response) => response.data.data as BranchItem[], ); return customerItemActions.map((customerItemAction) => { return { item: customerItemAction.customerItem.item as Item, branchItem: branchItems.find( - (branchItem) => branchItem.item === customerItemAction.customerItem.item + (branchItem) => + branchItem.item === customerItemAction.customerItem.item, ) as BranchItem, orderItem: createOrderItem( branchInfo, customerItemAction.customerItem.item as Item, customerItemAction.action as OrderItemType, "semester", - customerItemAction.customerItem + customerItemAction.customerItem, ), customerItem: customerItemAction.customerItem, branch: branchInfo, @@ -354,14 +353,14 @@ export const generateCartItemsFromCustomerItemActions = async ( export const generateCartItemsFromSubjects = async ( subjects: string[], - branchID: string + branchID: string, ): Promise => { const [branch, branchItems] = await Promise.all([ get(`branches/${branchID}`).then( - (response) => response.data.data[0] as Branch + (response) => response.data.data[0] as Branch, ), get(`branchitems`, `?branch=${branchID}`).then( - (response) => response.data.data as BranchItem[] + (response) => response.data.data as BranchItem[], ), ]); @@ -369,21 +368,21 @@ export const generateCartItemsFromSubjects = async ( const items = await Promise.all( selectedBranchItems.map((branchItem) => get(`items/${branchItem.item}`).then( - (response) => response.data.data[0] as Item - ) - ) + (response) => response.data.data[0] as Item, + ), + ), ); return items.map((item) => { return { item, branchItem: branchItems.find( - (branchItem) => branchItem.item === item.id + (branchItem) => branchItem.item === item.id, ) as BranchItem, orderItem: createOrderItem( branch, item, getOrderItemTypeFromBranch(branch), - "semester" + "semester", ), branch, }; diff --git a/src/utils/paymentUtils.ts b/src/utils/paymentUtils.ts index 92e144c..ec88d86 100644 --- a/src/utils/paymentUtils.ts +++ b/src/utils/paymentUtils.ts @@ -23,7 +23,7 @@ const calculateTaxAmount = (order: Order, delivery?: Delivery): number => { export const createDibsPayment = ( order: Order, - delivery: Delivery + delivery: Delivery, ): Payment => { return { id: "", diff --git a/src/utils/theme.ts b/src/utils/theme.ts index 405e787..8b87d79 100644 --- a/src/utils/theme.ts +++ b/src/utils/theme.ts @@ -1,5 +1,5 @@ -import { createTheme, responsiveFontSizes } from "@mui/material/styles"; import { red } from "@mui/material/colors"; +import { createTheme, responsiveFontSizes } from "@mui/material/styles"; /** * Create a theme instance. @@ -88,7 +88,7 @@ const theme = responsiveFontSizes( xl: 1200, }, }, - }) + }), ); export default theme; diff --git a/src/utils/types.ts b/src/utils/types.ts index bdd418e..0491b0a 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -44,6 +44,7 @@ export interface Item { price: number; taxRate: number; digital?: boolean; + // eslint-disable-next-line @typescript-eslint/no-explicit-any info?: any; desc?: string; buyback?: boolean; diff --git a/src/utils/typographyVariants.ts b/src/utils/typographyVariants.ts index 0768c35..71ea62a 100644 --- a/src/utils/typographyVariants.ts +++ b/src/utils/typographyVariants.ts @@ -3,9 +3,10 @@ * @see theme */ import React from "react"; + // used for module JSdoc -// eslint-disable-next-line no-unused-vars -import theme from "./theme"; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import theme from "utils/theme"; declare module "@mui/material/styles" { // eslint-disable-next-line no-unused-vars diff --git a/yarn.lock b/yarn.lock index 81d7a8e..e3fcddc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" @@ -31,6 +36,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== +"@babel/helper-validator-identifier@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044" + integrity sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ== + "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" @@ -75,43 +85,43 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@commitlint/cli@^17.4.2": - version "17.4.2" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.4.2.tgz#8600c83abb7e84191fd59528fc14f436496fb00b" - integrity sha512-0rPGJ2O1owhpxMIXL9YJ2CgPkdrFLKZElIZHXDN8L8+qWK1DGH7Q7IelBT1pchXTYTuDlqkOTdh//aTvT3bSUA== - dependencies: - "@commitlint/format" "^17.4.0" - "@commitlint/lint" "^17.4.2" - "@commitlint/load" "^17.4.2" - "@commitlint/read" "^17.4.2" - "@commitlint/types" "^17.4.0" +"@commitlint/cli@^17.7.1": + version "17.7.1" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.7.1.tgz#f3ab35bd38d82fcd4ab03ec5a1e9db26d57fe1b0" + integrity sha512-BCm/AT06SNCQtvFv921iNhudOHuY16LswT0R3OeolVGLk8oP+Rk9TfQfgjH7QPMjhvp76bNqGFEcpKojxUNW1g== + dependencies: + "@commitlint/format" "^17.4.4" + "@commitlint/lint" "^17.7.0" + "@commitlint/load" "^17.7.1" + "@commitlint/read" "^17.5.1" + "@commitlint/types" "^17.4.4" execa "^5.0.0" lodash.isfunction "^3.0.9" resolve-from "5.0.0" resolve-global "1.0.0" yargs "^17.0.0" -"@commitlint/config-conventional@^17.4.2": - version "17.4.2" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-17.4.2.tgz#671f7febfcfef90ec11b122a659c6be25e11c19e" - integrity sha512-JVo1moSj5eDMoql159q8zKCU8lkOhQ+b23Vl3LVVrS6PXDLQIELnJ34ChQmFVbBdSSRNAbbXnRDhosFU+wnuHw== +"@commitlint/config-conventional@^17.7.0": + version "17.7.0" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-17.7.0.tgz#1bbf2bce7851db63c1a8aa8d924277ad4938247e" + integrity sha512-iicqh2o6et+9kWaqsQiEYZzfLbtoWv9uZl8kbI8EGfnc0HeGafQBF7AJ0ylN9D/2kj6txltsdyQs8+2fTMwWEw== dependencies: - conventional-changelog-conventionalcommits "^5.0.0" + conventional-changelog-conventionalcommits "^6.1.0" -"@commitlint/config-validator@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-17.4.0.tgz#2cb229672a22476cf1f21bedbfcd788e5da5b54f" - integrity sha512-Sa/+8KNpDXz4zT4bVbz2fpFjvgkPO6u2V2fP4TKgt6FjmOw2z3eEX859vtfeaTav/ukBw0/0jr+5ZTZp9zCBhA== +"@commitlint/config-validator@^17.6.7": + version "17.6.7" + resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-17.6.7.tgz#c664d42a1ecf5040a3bb0843845150f55734df41" + integrity sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ== dependencies: - "@commitlint/types" "^17.4.0" + "@commitlint/types" "^17.4.4" ajv "^8.11.0" -"@commitlint/ensure@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-17.4.0.tgz#3de65768bfccb9956ec3a0ecd8a415421bf315e5" - integrity sha512-7oAxt25je0jeQ/E0O/M8L3ADb1Cvweu/5lc/kYF8g/kXatI0wxGE5La52onnAUAWeWlsuvBNar15WcrmDmr5Mw== +"@commitlint/ensure@^17.6.7": + version "17.6.7" + resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-17.6.7.tgz#77a77a0c05e6a1c34589f59e82e6cb937101fc4b" + integrity sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw== dependencies: - "@commitlint/types" "^17.4.0" + "@commitlint/types" "^17.4.4" lodash.camelcase "^4.3.0" lodash.kebabcase "^4.1.1" lodash.snakecase "^4.1.1" @@ -123,42 +133,42 @@ resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz#4518e77958893d0a5835babe65bf87e2638f6939" integrity sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA== -"@commitlint/format@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-17.4.0.tgz#1c80cf3a6274ff9b3d3c0dd150a97882d557aa0f" - integrity sha512-Z2bWAU5+f1YZh9W76c84J8iLIWIvvm+mzqogTz0Nsc1x6EHW0Z2gI38g5HAjB0r0I3ZjR15IDEJKhsxyblcyhA== +"@commitlint/format@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-17.4.4.tgz#0f6e1b4d7a301c7b1dfd4b6334edd97fc050b9f5" + integrity sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ== dependencies: - "@commitlint/types" "^17.4.0" + "@commitlint/types" "^17.4.4" chalk "^4.1.0" -"@commitlint/is-ignored@^17.4.2": - version "17.4.2" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.4.2.tgz#2d40a34e071c3e595e485fafe8460457a7b7af9d" - integrity sha512-1b2Y2qJ6n7bHG9K6h8S4lBGUl6kc7mMhJN9gy1SQfUZqe92ToDjUTtgNWb6LbzR1X8Cq4SEus4VU8Z/riEa94Q== +"@commitlint/is-ignored@^17.7.0": + version "17.7.0" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.7.0.tgz#df9b284420bdb1aed5fdb2be44f4e98cc4826014" + integrity sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw== dependencies: - "@commitlint/types" "^17.4.0" - semver "7.3.8" + "@commitlint/types" "^17.4.4" + semver "7.5.4" -"@commitlint/lint@^17.4.2": - version "17.4.2" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.4.2.tgz#1277cb4d5395e9d6c39cbc351984bac9dcc6b7cd" - integrity sha512-HcymabrdBhsDMNzIv146+ZPNBPBK5gMNsVH+el2lCagnYgCi/4ixrHooeVyS64Fgce2K26+MC7OQ4vVH8wQWVw== +"@commitlint/lint@^17.7.0": + version "17.7.0" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.7.0.tgz#33f831298dc43679e4de6b088aea63d1f884c7e7" + integrity sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA== dependencies: - "@commitlint/is-ignored" "^17.4.2" - "@commitlint/parse" "^17.4.2" - "@commitlint/rules" "^17.4.2" - "@commitlint/types" "^17.4.0" + "@commitlint/is-ignored" "^17.7.0" + "@commitlint/parse" "^17.7.0" + "@commitlint/rules" "^17.7.0" + "@commitlint/types" "^17.4.4" -"@commitlint/load@^17.4.2": - version "17.4.2" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-17.4.2.tgz#551875c3e1dce6dc0375dc9c8ad551de8ba35de4" - integrity sha512-Si++F85rJ9t4hw6JcOw1i2h0fdpdFQt0YKwjuK4bk9KhFjyFkRxvR3SB2dPaMs+EwWlDrDBGL+ygip1QD6gmPw== +"@commitlint/load@^17.7.1": + version "17.7.1" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-17.7.1.tgz#0723b11723a20043a304a74960602dead89b5cdd" + integrity sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ== dependencies: - "@commitlint/config-validator" "^17.4.0" + "@commitlint/config-validator" "^17.6.7" "@commitlint/execute-rule" "^17.4.0" - "@commitlint/resolve-extends" "^17.4.0" - "@commitlint/types" "^17.4.0" - "@types/node" "*" + "@commitlint/resolve-extends" "^17.6.7" + "@commitlint/types" "^17.4.4" + "@types/node" "20.4.7" chalk "^4.1.0" cosmiconfig "^8.0.0" cosmiconfig-typescript-loader "^4.0.0" @@ -167,54 +177,54 @@ lodash.uniq "^4.5.0" resolve-from "^5.0.0" ts-node "^10.8.1" - typescript "^4.6.4" + typescript "^4.6.4 || ^5.0.0" "@commitlint/message@^17.4.2": version "17.4.2" resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-17.4.2.tgz#f4753a79701ad6db6db21f69076e34de6580e22c" integrity sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q== -"@commitlint/parse@^17.4.2": - version "17.4.2" - resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-17.4.2.tgz#b0f8a257a1f93387a497408b0b4cadba60ee3359" - integrity sha512-DK4EwqhxfXpyCA+UH8TBRIAXAfmmX4q9QRBz/2h9F9sI91yt6mltTrL6TKURMcjUVmgaB80wgS9QybNIyVBIJA== +"@commitlint/parse@^17.7.0": + version "17.7.0" + resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-17.7.0.tgz#aacb2d189e50ab8454154b1df150aaf20478ae47" + integrity sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag== dependencies: - "@commitlint/types" "^17.4.0" - conventional-changelog-angular "^5.0.11" - conventional-commits-parser "^3.2.2" + "@commitlint/types" "^17.4.4" + conventional-changelog-angular "^6.0.0" + conventional-commits-parser "^4.0.0" -"@commitlint/read@^17.4.2": - version "17.4.2" - resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-17.4.2.tgz#4880a05271fb44cefa54d365a17d5753496a6de0" - integrity sha512-hasYOdbhEg+W4hi0InmXHxtD/1favB4WdwyFxs1eOy/DvMw6+2IZBmATgGOlqhahsypk4kChhxjAFJAZ2F+JBg== +"@commitlint/read@^17.5.1": + version "17.5.1" + resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-17.5.1.tgz#fec903b766e2c41e3cefa80630040fcaba4f786c" + integrity sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg== dependencies: "@commitlint/top-level" "^17.4.0" - "@commitlint/types" "^17.4.0" + "@commitlint/types" "^17.4.4" fs-extra "^11.0.0" - git-raw-commits "^2.0.0" + git-raw-commits "^2.0.11" minimist "^1.2.6" -"@commitlint/resolve-extends@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-17.4.0.tgz#9023da6c70c4ebd173b4b0995fe29f27051da2d3" - integrity sha512-3JsmwkrCzoK8sO22AzLBvNEvC1Pmdn/65RKXzEtQMy6oYMl0Snrq97a5bQQEFETF0VsvbtUuKttLqqgn99OXRQ== +"@commitlint/resolve-extends@^17.6.7": + version "17.6.7" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz#9c53a4601c96ab2dd20b90fb35c988639307735d" + integrity sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg== dependencies: - "@commitlint/config-validator" "^17.4.0" - "@commitlint/types" "^17.4.0" + "@commitlint/config-validator" "^17.6.7" + "@commitlint/types" "^17.4.4" import-fresh "^3.0.0" lodash.mergewith "^4.6.2" resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/rules@^17.4.2": - version "17.4.2" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-17.4.2.tgz#cdf203bc82af979cb319210ef9215cb1de216a9b" - integrity sha512-OGrPsMb9Fx3/bZ64/EzJehY9YDSGWzp81Pj+zJiY+r/NSgJI3nUYdlS37jykNIugzazdEXfMtQ10kmA+Kx2pZQ== +"@commitlint/rules@^17.7.0": + version "17.7.0" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-17.7.0.tgz#b97a4933c5cba11a659a19ee467f6f000f31533e" + integrity sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA== dependencies: - "@commitlint/ensure" "^17.4.0" + "@commitlint/ensure" "^17.6.7" "@commitlint/message" "^17.4.2" "@commitlint/to-lines" "^17.4.0" - "@commitlint/types" "^17.4.0" + "@commitlint/types" "^17.4.4" execa "^5.0.0" "@commitlint/to-lines@^17.4.0": @@ -229,10 +239,10 @@ dependencies: find-up "^5.0.0" -"@commitlint/types@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-17.4.0.tgz#c7c2b97b959f6175c164632bf26208ce417b3f31" - integrity sha512-2NjAnq5IcxY9kXtUeO2Ac0aPpvkuOmwbH/BxIm36XXK5LtWFObWJWjXOA+kcaABMrthjWu6la+FUpyYFMHRvbA== +"@commitlint/types@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-17.4.4.tgz#1416df936e9aad0d6a7bbc979ecc31e55dade662" + integrity sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ== dependencies: chalk "^4.1.0" @@ -426,21 +436,26 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== -"@eslint-community/eslint-utils@^4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.1.2.tgz#14ca568ddaa291dd19a4a54498badc18c6cfab78" - integrity sha512-7qELuQWWjVDdVsFQ5+beUl+KPczrEDA7S3zM4QUd/bJl7oXgsmpXaEVqrRTnOBqenOV4rWf2kVZk2Ot085zPWA== +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint/eslintrc@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.8.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" + integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== + +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" + espree "^9.6.0" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -448,15 +463,20 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.48.0": + version "8.48.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.48.0.tgz#642633964e217905436033a2bd08bf322849b7fb" + integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw== + "@fontsource/roboto@^4.5.8": version "4.5.8" resolved "https://registry.yarnpkg.com/@fontsource/roboto/-/roboto-4.5.8.tgz#56347764786079838faf43f0eeda22dd7328437f" integrity sha512-CnD7zLItIzt86q4Sj3kZUiLcBk1dSk81qcqgMGaZe7SQ1P8hFNxhMl5AZthK1zrDM5m74VVhaOpuMGIL4gagaA== -"@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== +"@humanwhocodes/config-array@^0.11.10": + version "0.11.11" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" + integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" @@ -620,10 +640,10 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.2.tgz#4f13e3e9d44bb17fdc1d4543827459097035f10f" integrity sha512-PpT4UZIX66VMTqXt4HKEJ+/PwbS+tWmmhZlazaws1a+dbUA5pPdjntQ46Jvj616i3ZKN9doS9LHx3y50RLjAWg== -"@next/eslint-plugin-next@13.1.2": - version "13.1.2" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.2.tgz#613deefddc9a2f3a3ef01a100cbcff54dfa03fd0" - integrity sha512-WGaNVvIYphdriesP6r7jq/8l7u38tzotnVQuxc1RYKLqYYApSsrebti3OCPoT3Gx0pw2smPIFHH98RzcsgW5GQ== +"@next/eslint-plugin-next@13.4.19": + version "13.4.19" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.19.tgz#93d130c37b47fd120f6d111aee36a60611148df1" + integrity sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ== dependencies: glob "7.1.7" @@ -816,6 +836,11 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" +"@types/json-schema@^7.0.12": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -836,6 +861,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== +"@types/node@20.4.7": + version "20.4.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.7.tgz#74d323a93f1391a63477b27b9aec56669c98b2ab" + integrity sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g== + "@types/node@^14.14.31": version "14.18.36" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.36.tgz#c414052cb9d43fab67d679d5f3c641be911f5835" @@ -918,6 +948,11 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/semver@^7.5.0": + version "7.5.1" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.1.tgz#0480eeb7221eb9bc398ad7432c9d7e14b1a5a367" + integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg== + "@types/sinonjs__fake-timers@8.1.1": version "8.1.1" resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" @@ -950,49 +985,90 @@ dependencies: "@types/node" "*" -"@typescript-eslint/parser@^5.42.0": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.1.tgz#d0125792dab7e232035434ab8ef0658154db2f10" - integrity sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA== +"@typescript-eslint/eslint-plugin@^6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.6.0.tgz#19ba09aa34fd504696445100262e5a9e1b1d7024" + integrity sha512-CW9YDGTQnNYMIo5lMeuiIG08p4E0cXrXTbcZ2saT/ETE7dWUrNxlijsQeU04qAAKkILiLzdQz+cGFxCJjaZUmA== dependencies: - "@typescript-eslint/scope-manager" "5.48.1" - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/typescript-estree" "5.48.1" + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.6.0" + "@typescript-eslint/type-utils" "6.6.0" + "@typescript-eslint/utils" "6.6.0" + "@typescript-eslint/visitor-keys" "6.6.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^5.4.2 || ^6.0.0", "@typescript-eslint/parser@^6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.6.0.tgz#fe323a7b4eafb6d5ea82b96216561810394a739e" + integrity sha512-setq5aJgUwtzGrhW177/i+DMLqBaJbdwGj2CPIVFFLE0NCliy5ujIdLHd2D1ysmlmsjdL2GWW+hR85neEfc12w== + dependencies: + "@typescript-eslint/scope-manager" "6.6.0" + "@typescript-eslint/types" "6.6.0" + "@typescript-eslint/typescript-estree" "6.6.0" + "@typescript-eslint/visitor-keys" "6.6.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz#39c71e4de639f5fe08b988005beaaf6d79f9d64d" - integrity sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ== +"@typescript-eslint/scope-manager@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.6.0.tgz#57105d4419d6de971f7d2c30a2ff4ac40003f61a" + integrity sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw== dependencies: - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/visitor-keys" "5.48.1" + "@typescript-eslint/types" "6.6.0" + "@typescript-eslint/visitor-keys" "6.6.0" -"@typescript-eslint/types@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.1.tgz#efd1913a9aaf67caf8a6e6779fd53e14e8587e14" - integrity sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg== +"@typescript-eslint/type-utils@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.6.0.tgz#14f651d13b884915c4fca0d27adeb652a4499e86" + integrity sha512-8m16fwAcEnQc69IpeDyokNO+D5spo0w1jepWWY2Q6y5ZKNuj5EhVQXjtVAeDDqvW6Yg7dhclbsz6rTtOvcwpHg== + dependencies: + "@typescript-eslint/typescript-estree" "6.6.0" + "@typescript-eslint/utils" "6.6.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" -"@typescript-eslint/typescript-estree@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz#9efa8ee2aa471c6ab62e649f6e64d8d121bc2056" - integrity sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA== +"@typescript-eslint/types@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.6.0.tgz#95e7ea650a2b28bc5af5ea8907114a48f54618c2" + integrity sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg== + +"@typescript-eslint/typescript-estree@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.6.0.tgz#373c420d2e12c28220f4a83352280a04823a91b7" + integrity sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA== dependencies: - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/visitor-keys" "5.48.1" + "@typescript-eslint/types" "6.6.0" + "@typescript-eslint/visitor-keys" "6.6.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/visitor-keys@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz#79fd4fb9996023ef86849bf6f904f33eb6c8fccb" - integrity sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA== - dependencies: - "@typescript-eslint/types" "5.48.1" - eslint-visitor-keys "^3.3.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.6.0.tgz#2d686c0f0786da6362d909e27a9de1c13ba2e7dc" + integrity sha512-mPHFoNa2bPIWWglWYdR0QfY9GN0CfvvXX1Sv6DlSTive3jlMTUy+an67//Gysc+0Me9pjitrq0LJp0nGtLgftw== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.6.0" + "@typescript-eslint/types" "6.6.0" + "@typescript-eslint/typescript-estree" "6.6.0" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.6.0.tgz#1109088b4346c8b2446f3845db526374d9a3bafc" + integrity sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ== + dependencies: + "@typescript-eslint/types" "6.6.0" + eslint-visitor-keys "^3.4.1" "@zxing/library@^0.17.0": version "0.17.1" @@ -1008,7 +1084,7 @@ resolved "https://registry.yarnpkg.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz#fb50ffabc6c7c66a0c96b4c03e3d9be74864b70b" integrity sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA== -JSONStream@^1.0.4: +JSONStream@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== @@ -1026,11 +1102,16 @@ acorn-walk@^8.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.4.1, acorn@^8.8.0: +acorn@^8.4.1: version "8.8.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== +acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -1039,7 +1120,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1071,11 +1152,23 @@ ansi-escapes@^4.3.0: dependencies: type-fest "^0.21.3" +ansi-escapes@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" + integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== + dependencies: + type-fest "^1.0.2" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -1095,6 +1188,11 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.0.0, ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + arch@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" @@ -1117,6 +1215,14 @@ aria-query@^5.0.0, aria-query@^5.1.3: dependencies: deep-equal "^2.0.5" +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + array-differ@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" @@ -1143,6 +1249,17 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.findlastindex@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" + array.prototype.flat@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" @@ -1174,6 +1291,19 @@ array.prototype.tosorted@^1.1.1: es-shim-unscopables "^1.0.0" get-intrinsic "^1.1.3" +arraybuffer.prototype.slice@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -1387,6 +1517,11 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== +chalk@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1422,11 +1557,16 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== -ci-info@^3.2.0, ci-info@^3.6.1: +ci-info@^3.2.0: version "3.7.1" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.1.tgz#708a6cdae38915d597afdf3b145f2f8e1ff55f3f" integrity sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w== +ci-info@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + classnames@^2.2.6: version "2.3.2" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" @@ -1451,6 +1591,13 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== + dependencies: + restore-cursor "^4.0.0" + cli-table3@~0.6.1: version "0.6.3" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" @@ -1468,6 +1615,14 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + client-only@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" @@ -1532,6 +1687,11 @@ colorette@^2.0.16: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== +colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -1539,6 +1699,11 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +commander@11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" + integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== + commander@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" @@ -1562,34 +1727,29 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -conventional-changelog-angular@^5.0.11: - version "5.0.13" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" - integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== +conventional-changelog-angular@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz#a9a9494c28b7165889144fd5b91573c4aa9ca541" + integrity sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg== dependencies: compare-func "^2.0.0" - q "^1.5.1" -conventional-changelog-conventionalcommits@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz#41bdce54eb65a848a4a3ffdca93e92fa22b64a86" - integrity sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw== +conventional-changelog-conventionalcommits@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz#3bad05f4eea64e423d3d90fc50c17d2c8cf17652" + integrity sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw== dependencies: compare-func "^2.0.0" - lodash "^4.17.15" - q "^1.5.1" -conventional-commits-parser@^3.2.2: - version "3.2.4" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" - integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== +conventional-commits-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" + integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== dependencies: - JSONStream "^1.0.4" + JSONStream "^1.3.5" is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" + meow "^8.1.2" + split2 "^3.2.2" convert-source-map@^1.5.0: version "1.9.0" @@ -1733,6 +1893,13 @@ dayjs@^1.10.4: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== +debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + debug@^3.1.0, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -1740,13 +1907,6 @@ debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" @@ -1813,6 +1973,14 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1890,6 +2058,11 @@ duplexer2@^0.1.2: dependencies: readable-stream "^2.0.2" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -1923,6 +2096,14 @@ enhanced-resolve@^5.10.0: graceful-fs "^4.2.4" tapable "^2.2.0" +enhanced-resolve@^5.12.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -1976,6 +2157,51 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: unbox-primitive "^1.0.2" which-typed-array "^1.1.9" +es-abstract@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" + integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.1" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.1" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.0" + safe-array-concat "^1.0.0" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.10" + es-get-iterator@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" @@ -2031,25 +2257,25 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-next@13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.1.2.tgz#bd15be592546e3543f77f96bc55be830dd76fd41" - integrity sha512-zdRAQOr8v69ZwJRtBrGqAqm160ONqKxU/pV1FB1KlgfyqveGsLZmlQ7l31otwtw763901J7xdiTVkj2y3YxXZA== +eslint-config-next@13.4.19: + version "13.4.19" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.4.19.tgz#f46be9d4bd9e52755f846338456132217081d7f8" + integrity sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g== dependencies: - "@next/eslint-plugin-next" "13.1.2" + "@next/eslint-plugin-next" "13.4.19" "@rushstack/eslint-patch" "^1.1.3" - "@typescript-eslint/parser" "^5.42.0" + "@typescript-eslint/parser" "^5.4.2 || ^6.0.0" eslint-import-resolver-node "^0.3.6" eslint-import-resolver-typescript "^3.5.2" eslint-plugin-import "^2.26.0" eslint-plugin-jsx-a11y "^6.5.1" eslint-plugin-react "^7.31.7" - eslint-plugin-react-hooks "^4.5.0" + eslint-plugin-react-hooks "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" -eslint-config-prettier@^8.6.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz#dec1d29ab728f4fa63061774e1672ac4e363d207" - integrity sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA== +eslint-config-prettier@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" + integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7: version "0.3.7" @@ -2073,6 +2299,19 @@ eslint-import-resolver-typescript@^3.5.2: is-glob "^4.0.3" synckit "^0.8.4" +eslint-import-resolver-typescript@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz#36f93e1eb65a635e688e16cae4bead54552e3bbd" + integrity sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg== + dependencies: + debug "^4.3.4" + enhanced-resolve "^5.12.0" + eslint-module-utils "^2.7.4" + fast-glob "^3.3.1" + get-tsconfig "^4.5.0" + is-core-module "^2.11.0" + is-glob "^4.0.3" + eslint-module-utils@^2.7.4: version "2.7.4" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" @@ -2080,12 +2319,19 @@ eslint-module-utils@^2.7.4: dependencies: debug "^3.2.7" -eslint-plugin-cypress@^2.12.1: - version "2.12.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz#9aeee700708ca8c058e00cdafe215199918c2632" - integrity sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA== +eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-cypress@^2.14.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.14.0.tgz#c65e1f592680dd25bbd00c86194ee85fecf59bd7" + integrity sha512-eW6tv7iIg7xujleAJX4Ujm649Bf5jweqa4ObPEIuueYRyLZt7qXGWhCY/n4bfeFW/j6nQZwbIBHKZt6EKcL/cg== dependencies: - globals "^11.12.0" + globals "^13.20.0" eslint-plugin-import@^2.26.0: version "2.27.4" @@ -2108,6 +2354,29 @@ eslint-plugin-import@^2.26.0: semver "^6.3.0" tsconfig-paths "^3.14.1" +eslint-plugin-import@^2.28.1: + version "2.28.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" + integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== + dependencies: + array-includes "^3.1.6" + array.prototype.findlastindex "^1.2.2" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.8.0" + has "^1.0.3" + is-core-module "^2.13.0" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.6" + object.groupby "^1.0.0" + object.values "^1.1.6" + semver "^6.3.1" + tsconfig-paths "^3.14.2" + eslint-plugin-jsx-a11y@^6.5.1, eslint-plugin-jsx-a11y@^6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" @@ -2130,12 +2399,17 @@ eslint-plugin-jsx-a11y@^6.5.1, eslint-plugin-jsx-a11y@^6.7.1: object.fromentries "^2.0.6" semver "^6.3.0" +eslint-plugin-no-relative-import-paths@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-no-relative-import-paths/-/eslint-plugin-no-relative-import-paths-1.5.2.tgz#c35f2fd0bf2a6a57b268193ed7df63ff7000134e" + integrity sha512-wMlL+TVuDhKk1plP+w3L4Hc7+u89vUkrOYq6/0ARjcYqwc9/YaS9uEXNzaqAk+WLoEgakzNL5JgJJw6m4qd5zw== + eslint-plugin-promise@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== -eslint-plugin-react-hooks@^4.5.0: +"eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": version "4.6.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== @@ -2161,111 +2435,101 @@ eslint-plugin-react@^7.31.7: semver "^6.3.0" string.prototype.matchall "^4.0.8" -eslint-plugin-unicorn@^45.0.2: - version "45.0.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-45.0.2.tgz#d6ba704793a6909fe5dfe013900d2b05b715284c" - integrity sha512-Y0WUDXRyGDMcKLiwgL3zSMpHrXI00xmdyixEGIg90gHnj0PcHY4moNv3Ppje/kDivdAy5vUeUr7z211ImPv2gw== +eslint-plugin-unicorn@^48.0.1: + version "48.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-48.0.1.tgz#a6573bc1687ae8db7121fdd8f92394b6549a6959" + integrity sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw== dependencies: - "@babel/helper-validator-identifier" "^7.19.1" - "@eslint-community/eslint-utils" "^4.1.2" - ci-info "^3.6.1" + "@babel/helper-validator-identifier" "^7.22.5" + "@eslint-community/eslint-utils" "^4.4.0" + ci-info "^3.8.0" clean-regexp "^1.0.0" - esquery "^1.4.0" + esquery "^1.5.0" indent-string "^4.0.0" - is-builtin-module "^3.2.0" + is-builtin-module "^3.2.1" jsesc "^3.0.2" lodash "^4.17.21" pluralize "^8.0.0" read-pkg-up "^7.0.1" - regexp-tree "^0.1.24" - regjsparser "^0.9.1" - safe-regex "^2.1.1" - semver "^7.3.8" + regexp-tree "^0.1.27" + regjsparser "^0.10.0" + semver "^7.5.4" strip-indent "^3.0.0" -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - eslint-visitor-keys@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@8.31.0: - version "8.31.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.31.0.tgz#75028e77cbcff102a9feae1d718135931532d524" - integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== - dependencies: - "@eslint/eslintrc" "^1.4.1" - "@humanwhocodes/config-array" "^0.11.8" +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@8.48.0: + version "8.48.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.48.0.tgz#bf9998ba520063907ba7bfe4c480dc8be03c2155" + integrity sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.48.0" + "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + ajv "^6.12.4" 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.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + 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" - grapheme-splitter "^1.0.4" + 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-sdsl "^4.1.4" 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" - regexpp "^3.2.0" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.1" -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.4.2, esquery@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -2291,6 +2555,11 @@ eventemitter2@6.4.7: resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + execa@4.1.0, execa@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" @@ -2306,6 +2575,21 @@ execa@4.1.0, execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -2375,6 +2659,17 @@ fast-glob@^3.2.11, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + 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" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -2557,7 +2852,7 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functions-have-names@^1.2.2: +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -2576,6 +2871,16 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: has "^1.0.3" has-symbols "^1.0.3" +get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -2583,7 +2888,7 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" -get-stream@^6.0.0: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -2601,6 +2906,13 @@ get-tsconfig@^4.2.0: resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.3.0.tgz#4c26fae115d1050e836aea65d6fe56b507ee249b" integrity sha512-YCcF28IqSay3fqpIu5y3Krg/utCBHBeoflkZyHj/QcqI2nrLPC3ZegS9CmIo+hJb8K7aiGsuUl7PwWVjNG2HQQ== +get-tsconfig@^4.5.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.0.tgz#06ce112a1463e93196aa90320c35df5039147e34" + integrity sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw== + dependencies: + resolve-pkg-maps "^1.0.0" + getos@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" @@ -2615,7 +2927,7 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -git-raw-commits@^2.0.0: +git-raw-commits@^2.0.11: version "2.0.11" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== @@ -2683,11 +2995,6 @@ global-dirs@^3.0.0: dependencies: ini "2.0.0" -globals@^11.12.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^13.19.0: version "13.19.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" @@ -2695,6 +3002,13 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" +globals@^13.20.0: + version "13.21.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" + integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== + dependencies: + type-fest "^0.20.2" + globalthis@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" @@ -2747,10 +3061,10 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== hard-rejection@^2.1.0: version "2.1.0" @@ -2857,7 +3171,12 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -husky@^8.0.3: +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + +husky@>=6: version "8.0.3" resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== @@ -2867,7 +3186,7 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.1.4, ignore@^5.2.0: +ignore@^5.1.4, ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -2932,6 +3251,15 @@ internal-slot@^1.0.3, internal-slot@^1.0.4: has "^1.0.3" side-channel "^1.0.4" +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" @@ -2949,6 +3277,15 @@ is-array-buffer@^3.0.1: get-intrinsic "^1.1.3" is-typed-array "^1.1.10" +is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -2974,10 +3311,10 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-builtin-module@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.0.tgz#bb0310dfe881f144ca83f30100ceb10cf58835e0" - integrity sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw== +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== dependencies: builtin-modules "^3.3.0" @@ -3000,6 +3337,13 @@ is-core-module@^2.10.0, is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-m dependencies: has "^1.0.3" +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + dependencies: + has "^1.0.3" + is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -3022,6 +3366,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -3099,6 +3448,11 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -3193,11 +3547,6 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -js-sdsl@^4.1.4: - version "4.2.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" - integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -3255,7 +3604,7 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^1.0.1: +json5@^1.0.1, json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== @@ -3324,6 +3673,11 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lilconfig@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -3336,6 +3690,34 @@ linkify-it@^2.2.0: dependencies: uc.micro "^1.0.1" +lint-staged@>=10: + version "14.0.1" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-14.0.1.tgz#57dfa3013a3d60762d9af5d9c83bdb51291a6232" + integrity sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw== + dependencies: + chalk "5.3.0" + commander "11.0.0" + debug "4.3.4" + execa "7.2.0" + lilconfig "2.1.0" + listr2 "6.6.1" + micromatch "4.0.5" + pidtree "0.6.0" + string-argv "0.3.2" + yaml "2.3.1" + +listr2@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d" + integrity sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^5.0.1" + rfdc "^1.3.0" + wrap-ansi "^8.1.0" + listr2@^3.8.3: version "3.14.0" resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" @@ -3442,6 +3824,17 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" +log-update@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" + integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== + dependencies: + ansi-escapes "^5.0.0" + cli-cursor "^4.0.0" + slice-ansi "^5.0.0" + strip-ansi "^7.0.1" + wrap-ansi "^8.0.1" + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -3476,7 +3869,7 @@ map-obj@^4.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== -meow@^8.0.0: +meow@^8.0.0, meow@^8.1.2: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== @@ -3503,7 +3896,7 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4: +micromatch@4.0.5, micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -3528,6 +3921,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" @@ -3689,12 +4087,19 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.2, object-inspect@^1.9.0: +object-inspect@^1.12.2, object-inspect@^1.12.3, object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== @@ -3745,6 +4150,16 @@ object.fromentries@^2.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +object.groupby@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + object.hasown@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" @@ -3776,6 +4191,13 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + open@^8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" @@ -3785,17 +4207,17 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" 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" ospath@^1.2.2: version "1.2.2" @@ -3874,6 +4296,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -3904,6 +4331,11 @@ picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pidtree@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + pify@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -3946,10 +4378,10 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.2.tgz#c4ea1b5b454d7c4b59966db2e06ed7eec5dfd160" - integrity sha512-BtRV9BcncDyI2tsuS19zzhzoxD8Dh8LiCx7j7tHzrkz8GFXAexeWFdi22mjE1d16dftH2qNaytVxqiRTGlMfpw== +prettier@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" + integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== pretty-bytes@^5.6.0: version "5.6.0" @@ -4026,11 +4458,6 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.2.0.tgz#2092cc57cd2582c38e4e7e8bb869dc8d3148bc74" integrity sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw== -q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - qs@~6.10.3: version "6.10.5" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.5.tgz#974715920a80ff6a262264acd2c7e6c2a53282b4" @@ -4223,10 +4650,10 @@ regenerator-runtime@^0.13.11: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regexp-tree@^0.1.24, regexp-tree@~0.1.1: - version "0.1.24" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d" - integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw== +regexp-tree@^0.1.27: + version "0.1.27" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" + integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== regexp.prototype.flags@^1.4.3: version "1.4.3" @@ -4237,15 +4664,19 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +regexp.prototype.flags@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== +regjsparser@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.10.0.tgz#b1ed26051736b436f22fdec1c8f72635f9f44892" + integrity sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA== dependencies: jsesc "~0.5.0" @@ -4288,6 +4719,11 @@ resolve-global@1.0.0, resolve-global@^1.0.0: dependencies: global-dirs "^0.1.1" +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + resolve@^1.10.0, resolve@^1.19.0, resolve@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" @@ -4314,6 +4750,14 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +restore-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -4350,6 +4794,16 @@ rxjs@^7.5.1: dependencies: tslib "^2.1.0" +safe-array-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -4369,13 +4823,6 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -safe-regex@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" - integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== - dependencies: - regexp-tree "~0.1.1" - safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -4393,10 +4840,10 @@ scheduler@^0.23.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.3.8, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== +semver@7.5.4, semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" @@ -4405,6 +4852,18 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -4445,7 +4904,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -4499,6 +4958,14 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" @@ -4535,7 +5002,7 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== -split2@^3.0.0: +split2@^3.0.0, split2@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== @@ -4564,6 +5031,11 @@ stop-iteration-iterator@^1.0.0: dependencies: internal-slot "^1.0.4" +string-argv@0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + string-similarity@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-4.0.4.tgz#42d01ab0b34660ea8a018da8f56a3309bb8b2a5b" @@ -4578,6 +5050,15 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.0, string-width@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string.prototype.matchall@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" @@ -4592,6 +5073,15 @@ string.prototype.matchall@^4.0.8: regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + string.prototype.trimend@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" @@ -4636,6 +5126,13 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -4646,6 +5143,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -4653,7 +5155,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -4822,6 +5324,11 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== +ts-api-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.2.tgz#7c094f753b6705ee4faee25c3c684ade52d66d99" + integrity sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ== + ts-custom-error@^3.0.0: version "3.3.1" resolved "https://registry.yarnpkg.com/ts-custom-error/-/ts-custom-error-3.3.1.tgz#8bd3c8fc6b8dc8e1cb329267c45200f1e17a65d1" @@ -4856,23 +5363,21 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tsconfig-paths@^3.14.2: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" tslib@^2.1.0, tslib@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -4917,6 +5422,41 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + typed-array-length@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" @@ -4926,11 +5466,16 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typescript@^4.5.2, typescript@^4.6.4, typescript@^4.9.4: +typescript@^4.5.2, typescript@^4.9.4: version "4.9.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== +"typescript@^4.6.4 || ^5.0.0": + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + ua-parser-js@^0.7.18: version "0.7.32" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.32.tgz#cd8c639cdca949e30fa68c44b7813ef13e36d211" @@ -5044,6 +5589,17 @@ which-collection@^1.0.1: is-weakmap "^2.0.1" is-weakset "^2.0.1" +which-typed-array@^1.1.10: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== + 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" + which-typed-array@^1.1.9: version "1.1.9" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" @@ -5063,11 +5619,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -5086,6 +5637,15 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -5108,6 +5668,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" + integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== + yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"